为什么通过密码文件的 SSH 登录服务器无法工作

为什么通过密码文件的 SSH 登录服务器无法工作

我想通过SSH登录服务器而不输入密码,所以我使用了一个文件。但这行不通

c52594xx@bsa0483:~$ ls login.txt
login.txt

**c52594xx@bsa0483:~$ ssh bsa10881.fra1 <<login.txt
> ^C
c52594xx@bsa0483:~$
c52594xx@bsa0483:~$ ssh bsa10881.fra1 << login.txt
> ^C
c52594xx@bsa0483:~$
c52594xx@bsa0483:~$ ssh [email protected] <<login.txt
> ^C

c52594xx@bsa0483:~$ cat /etc/issue
Ubuntu 9.10 \n \l**

答案1

与其他几个程序一样,SSH 不从标准输入获取密码输入,而是显式从 获取密码输入/dev/tty,因此密码输入不能(轻松)重定向。

这是因为 SSH 始终具有密钥身份验证,这是 SSH 非交互式身份验证的首选形式。

例如,您可以在 bsa0483 主机上创建 SSH 密钥对,然后通过运行并输入密码(仅限一次性)或仅从bsa0483 复制到ssh-keygen -t rsabsa10881 将相应的公钥安装到bsa10881。ssh-copy-id bsa10881~/.ssh/id_rsa.pub~/.ssh/authorized_keys

默认情况下,ssh-keygen要求您使用密码加密 SSH 私钥。如果您执行此操作(而不执行其他操作),则每次使用密钥时都会要求您输入密码。但出于自动化目的,您可以选择不设置密码:这允许在不输入密码或密钥密码的情况下登录,并且并不比将密码嵌入到脚本中安全。

(这可能会稍微安全一些,因为ssh-keygenSSH 客户端会注意私钥受到适当的保护,并且如果 SSH 客户端发现该密钥可以被其他人读取,则会输出一个大警告或完全停止使用该密钥。 )

但是,安全性和便利性的最佳组合可能来自使用 SSH 身份验证代理,尽管它需要更多的一次性设置。您可以登录到具有 SSH 密钥对的系统(例如 bsa0483),启动身份验证代理(也许在登录脚本中?)并使用ssh-add它来提供您的 SSH 密钥(并输入一次密钥密码)。现在,只要代理正在运行,您就可以根据需要使用密钥身份验证从该主机建立任意数量的传出 SSH 连接,无需输入密钥密码

在受信任的主机之间,您甚至可以选择使用代理连接转发,因此,如果您的身份验证代理代理位于主机 A 上,并且已将公钥复制到主机 B、C 和 D,则可以从 A 到 B 进行 SSH然后从B继续到C或D以任何顺序,仍然不会被要求输入密码或密码短语。

但如果您绝对必须使用 SSH 密码身份验证而不手动输入密码,请安装该sshpass工具:apt-get install sshpass希望在您非常旧的 Ubuntu 中可用)。更多细节:https://stackoverflow.com/q/12202587/9197000

相关内容