我正在尝试部署一个可执行文件并从 Linux 在远程 Unix 计算机(Linux/Solaris)上执行它,而无需手动输入密码。
我尝试使用 scp 和 SSH key-gen 实用程序与远程服务器交互,但无论哪种方式,我都无法避免手动提供密码。由于我需要从 Java 代码运行此命令/实用程序,因此我应该完全避免在运行时提示输入密码。我在 Google 上搜索了很多主题,但没有任何结果。
我怎样才能做到这一点?
答案1
您应该使用公钥/私钥对设置身份验证,正如您之前提到的那样,您使用 生成了ssh-keygen
。如果您需要在自动脚本中使用它,请在私钥上生成不带密码的密钥。现在,只需使用 复制公钥即可ssh-copy-id name@host
在远程端正确设置它(授权公钥)。
我建议你按照以下教程进行操作这个。
如果ssh
有效,则scp
同样有效。
正确设置后,您应该能够在无需交互的情况下执行此操作:
scp myscript.sh name@remotehost:~/
ssh name@remotehost ~/myscript.sh
为了避免输入密码或密码短语,有几种选择
- 使用身份验证代理保存私钥的密码/密码短语
- 不要使用任何密码来保护私钥
前者适合交互式使用,后者不太安全。你可能需要为此设置一个新的用户 ID,并在远端赋予最小权限(例如 chrooted)
答案2
您需要阅读有关 rhosts 和 rlogin 的内容。
http://vegdave.wordpress.com/2007/05/17/how-to-rloginrcprsh-to-a-machine-without-enter-a-password/
答案3
步骤 0. 您必须具有远程机器的 ssh 访问权限。
步骤 1. 在您的 Linux 机器上生成 RSA 私钥/公钥对,ssh-keygen
并将其放在某个位置(例如 /root/identities)。不提供密码。
第2步。ssh-copy-id -i /root/identities/your.key [email protected]
步骤 3. 就是这样。现在您可以了ssh -i /root/identities/your.key user@remotemachine your_command
,并且不会提示密码。当然,您必须PubkeyAuthentication = yes
在远程机器上sshd_config
。