是否可以在 22 以外的端口上运行 ssh-copy-id?

Mil*_*kov 108 ssh

我有一台在非标准端口上运行 SSH 的服务器。它在 8129 上运行,而不是 22。要登录,我使用:

ssh -p 8129 hostname
Run Code Online (Sandbox Code Playgroud)

现在,每当我需要为无密码登录设置密钥时,我必须复制公钥并将其手动添加到authorized_keys。我发现该命令ssh-copy-id可用于简化此过程,但它似乎没有指定 ssh 服务器端口的选项。

有什么方法可以告诉ssh-copy-id使用端口 8129,还是应该忘记这个命令并像以前一样手动复制/粘贴?

小智 126

$ ssh-copy-id "-p 8129 user@host"
Run Code Online (Sandbox Code Playgroud)

来源: http : //it-ride.blogspot.com/2009/11/use-ssh-copy-id-on-different-port.html

注意:端口必须在 user@host 前面,否则将无法解析


编者按:在评论中指出,并表示其他的答案ssh-copy-id如由发货较新版本的OpenSSH支持-p <port_number>语法(不需要引号)。

  • 真的很愚蠢,`ssh` 有语法`ssh -p 1234 user@host`、`ssh-copy-id "-p 1234 user@host"` 和最后的`scp -P 1234 user@host`。拥有相同的语法真是太好了。 (14认同)
  • @Tombart 然后 rsync 有 `rsync -e "ssh -p 1234" user@host`。我发誓它比使用自定义端口更麻烦。 (2认同)
  • @Colt McCormack 的回答解释说,这在新版本中得到了改进,并且不再需要这种特殊的语法。 (2认同)
  • 仅供参考,完整命令需要输入两次 IP,并且应类似于: `ssh-copy-id "root@192.168.0.100 -p 12345" -i ~/.ssh/id_rsa.pub 192.168.0.100` (2认同)

Gil*_*il' 48

ssh-copy-id不接受任何可以传递给底层ssh命令的参数,但您可以在~/.ssh/config.

Host myhost
HostName hostname
Port 8129
Run Code Online (Sandbox Code Playgroud)

然后运行ssh-copy-id myhost

  • 这也有一个好处,即在常规的“ssh”尝试中不需要使用“-p”标志。因此,它不仅是这个问题的正确答案,而且是正确的事情,时期。 (3认同)

Col*_*ack 21

从 openssh-client_6.2 开始,该命令现在有一个专用端口标志,允许使用以下语法:

ssh-copy-id -p 8129 user@example
Run Code Online (Sandbox Code Playgroud)

它还增加了对使用 -o 标志添加其他 ssh 选项的支持。

这是 13.04 中引入的相应版本的 Ubuntu 手册页:http : //manpages.ubuntu.com/manpages/saucy/man1/ssh-copy-id.1.html

  • 这是唯一有效的方法。 (3认同)

Chr*_*own 11

快速查看源代码表明ssh-copy-id似乎没有允许这样做的功能。但是,您可以改为执行以下操作:

ssh -p8129 user@host 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_*.pub
Run Code Online (Sandbox Code Playgroud)


小智 7

这有效(从这里):

ssh-copy-id -i ~/.ssh/id_rsa.pub '-p 221 username@host'
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 5

我一直习惯scp复制过来:

scp -P 8129 ~/.ssh/id_*.pub user@host:
ssh -p 8129 user@host 'cat id_*.pub >> ~/.ssh/authorized_keys'
Run Code Online (Sandbox Code Playgroud)

虽然我必须说,如果我将来记得它们,我可能会使用其他(单线/连接)方法。但这是您的另一种选择。