3

我必须编写一个 shell 脚本,该脚本使用其他用户名 ssh 到另一台服务器,而实际上不要求用户输入密码?由于限制,我不能使用基于密钥的身份验证。let, 源服务器 -- abc.efg.com 源用户名 -- tom 源密码 -- tom123

目标服务器 -- xyz.efc.com 目标用户名 -- bob 目标密码 -- bob123

我必须将 bash 脚本放在源服务器中。请让我知道是否可以使用期望工具和/或 sshpass 完成某些事情。

我可以在 bash 脚本中硬编码目标服务器的密码,但我无法忍受交互式会话,只是当我运行他的脚本时,我想看到目标服务器使用另一个用户名登录。

提前致谢。

4

4 回答 4

10

您想使用密钥验证http://ornellas.apanela.com/dokuwiki/pub:ssh_key_auth

  1. 生成您的密钥ssh-keygen
  2. 将密钥复制到新盒子ssh-copy-id -i ~/.ssh/id_rsa.pub me@otherhost.com
  3. ssh 到其他没有密码的主机ssh me@otherhost.com
于 2013-03-12T08:45:38.463 回答
3

你可以使用expect来封装ssh,但是它很忙,并且在出现网络错误时很容易失败,所以好好测试一下或者使用专门为封装ssh密码而设计的脚本。基于密钥的身份验证更好。

您可以通过从空设备重定向标准输入来阻止交互式会话,即。

ssh me@destination destination-command < /dev/null

关于将脚本放置在源服务器中,如果您正在运行的脚本是本地的,而不是远程的,那么您可以通过标准输入而不是命令行来传递脚本:

cat bashscript.sh | ssh me@destination 
于 2013-03-12T09:50:10.757 回答
2

您可以安装该sshpass程序,它可以让您编写类似的脚本

#!/bin/bash

sshpass -p bob123 ssh UserName@xyz.efc.com
于 2013-03-12T13:06:56.220 回答
1

答案是您不能像 OpenSSH 那样主动阻止基于无头密码的身份验证。使用基于密钥的身份验证。

您也许可以分叉 OpenSSH 客户端代码并对其进行修补,但我认为这有点过分。

于 2013-03-12T08:15:13.703 回答