如何在非标准端口上使用 ssh-copy-id

如何在非标准端口上使用 ssh-copy-id

我想使用基于密钥的身份验证登录我的其中一台计算机。它的 sshd 运行在默认端口 22 之外。我想使用 将ssh-copy-id我的密钥添加到授权密钥列表中。我尝试使用 指定端口-p,就像 ssh 命令本身一样。但是我收到了非常奇怪的错误消息。

例如

user@box:~$ ssh-copy-id -p 57777 -i ~/.ssh/id_rsa.pub [email protected]
Bad port 'umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys'

user@box:~$ ssh-copy-id '-p 57777' -i ~/.ssh/id_rsa.pub [email protected] 
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh: Could not resolve hostname umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys: Name or service not known

我怎样才能让它工作?(我知道我可以手动将密钥添加到服务器上的authorized_keys文件中。但我很懒,而且非常好奇如何说服ssh-copy-id完成它的工作:))

答案1

引用已经是一个好主意,但最好这样做:

ssh-copy-id -i /home/user/.ssh/id_rsa.pub '-p 57777 [email protected]'

将您想告诉脚本使用的 ssh 命令的所有内容放在末尾,并引用所有内容。脚本认为最后一个参数是主机名,因此将其复制到生成的 ssh 命令的末尾。

(显然这是一个已知问题。请参阅此错误报告这个

答案2

对于那些想要替换脚本的人来说,这是我的ssh-copy-id.sh

#!/bin/bash
ssh $* 'mkdir -p ~/.ssh;echo '`cat ~/.ssh/id_rsa.pub`' >> ~/.ssh/authorized_keys;chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys'

现在你可以ssh-copy-id.sh [email protected] -p123456

显然,它不如真正的那么花哨,但至少它对于登录的用户来说是有用的。

相关内容