Можно ли запустить ssh-copy-id через порт, отличный от 22?

99

У меня сервер с SSH работает на нестандартном порту. Вместо 22 он работает на 8129. Для входа я использую:

ssh -p 8129 hostname

Теперь, когда мне нужно настроить ключ для входа без пароля, я должен скопировать открытый ключ и вручную добавить его к авторизованному ключу. Я обнаружил, что команду ssh-copy-idможно использовать для упрощения этого процесса, но, похоже, у нее нет возможности указать порт сервера ssh.

Есть ли какой-нибудь способ сказать ssh-copy-idиспользовать порт 8129, или я должен просто забыть об этой команде и скопировать / вставить вручную, как раньше?

Милан Бабушков
источник

Ответы:

112
$ ssh-copy-id "-p 8129 user@host"

Источник: http://it-ride.blogspot.com/2009/11/use-ssh-copy-id-on-different-port.html

ПРИМЕЧАНИЕ . Порт должен находиться перед пользователем @ host, иначе он не будет разрешен

JSAN
источник
11
Это действительно глупо, у этого sshесть синтаксис ssh -p 1234 user@host, ssh-copy-id "-p 1234 user@host"и наконец scp -P 1234 user@host. Было бы здорово иметь такой же синтаксис.
Томбарт
2
@ Томбарт, а затем rsync rsync -e "ssh -p 1234" user@host. Я клянусь, это больше хлопот, чем стоит использовать пользовательский порт.
garetmckinley
1
Ответ @Colt McCormack объясняет, что это улучшено в новых версиях, и этот специфический синтаксис больше не требуется.
меш
1
К вашему сведению, полная команда требует, чтобы IP был введен дважды, и должен выглядеть примерно так:ssh-copy-id "root@192.168.0.100 -p 12345" -i ~/.ssh/id_rsa.pub 192.168.0.100
вырожденный
1
На macOS (я на High Sierra) цитаты не обязательны. то есть. ssh-copy-id -p 8129 user@hostработает.
Арджун Мехта
46

ssh-copy-idне принимает аргументов, которые могут передаваться базовой sshкоманде, но вы можете настроить псевдоним в ~/.ssh/config.

Host myhost
HostName hostname
Port 8129

Тогда беги ssh-copy-id myhost.

жилль
источник
3
Это также имеет то преимущество, что устраняет необходимость в -pфлаге при регулярных sshпопытках. Таким образом, это не только правильный ответ на этот вопрос, это и есть правильная вещь, точка.
Уоррен Янг
Спасибо за это. Вторая строка «HostName hostname» не требуется, если вы удовлетворены естественным именем хоста.
Lonniebiz
17

Начиная с openssh-client_6.2, теперь есть команда выделенного флага порта, позволяющая использовать этот синтаксис:

ssh-copy-id -p 8129 user@example

Также добавлена ​​поддержка добавления других опций ssh ​​с флагом -o.

Вот справочная страница Ubuntu для соответствующей версии, представленная в 13.04: http://manpages.ubuntu.com/manpages/saucy/man1/ssh-copy-id.1.html

Кольт МакКормак
источник
3
Это единственный метод, который работал для.
Лука Стиб
11

Беглый взгляд на источник показывает, что, ssh-copy-idпохоже, нет функции, позволяющей это сделать. Однако вместо этого вы можете сделать что-то вроде следующего:

ssh -p8129 user@host 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_*.pub
Крис Даун
источник
5

Я всегда использовал, scpчтобы скопировать это:

scp -P 8129 ~/.ssh/id_*.pub user@host:
ssh -p 8129 user@host 'cat id_*.pub >> ~/.ssh/authorized_keys'

Хотя я должен сказать, что, вероятно, буду использовать другие методы (однострочный / соединение), если буду помнить их в будущем. Но это еще один вариант для вас.

Kevin
источник
2

На CentOS7 есть только:

 ssh-copy-id "-p 1234" user@host

Пожалуйста, постарайтесь не размещать user @ host в кавычках, иначе вы получите следующую ошибку в этом дистрибутиве:

/usr/bin/ssh-copy-id: ERROR: Bad port ' 1234 user@host'
Макс Каттинс
источник
0

С моим macOS это сработало.

ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port> user@host
Джин Квон
источник
0

Я использую эту команду:

ssh-copy-id ssh://user@ip_addr:port

Пример:

ssh-copy-id ssh://root@1.2.3.4:23

Carlos
источник