用于登录 ssh 服务器的 Shell 脚本

pra*_*tri 34 password ssh expect

我尝试编写一个 shell 脚本,它可以使用脚本中提到的密码自动登录到 ssh 服务器。我编写了以下代码:

set timeout 30
/usr/bin/ssh -p 8484 root@172.31.72.103
expect 
{
   "root@172.31.72.103's password" 
   {
      send "password\r" 
   }
}
Run Code Online (Sandbox Code Playgroud)

此代码运行不正常,仍然要求输入密码。有人可以帮我解决这个问题吗

sae*_*edn 46

我曾经写过一个expect脚本来登录 ssh 服务器(就像你的情况一样),我的脚本是这样的:

#!/usr/bin/expect

spawn ssh MyUserName@192.168.20.20
expect "password"
send "MyPassword\r"
interact
Run Code Online (Sandbox Code Playgroud)

我认为interact您的脚本中可能缺少 。


syn*_*tel 35

你这样做是错误的。您要做的是生成一个无密码的 ssh-key 对,然后(只要服务器支持 RSA 密钥身份验证)您就可以进入,而无需为所有人​​输入密码。如果您的私钥存储在可能被盗的地方,则存在安全风险。

按着这些次序:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Return提示输入密码时按
  5. 再按Return一次确认。

现在您的~/.ssh目录中将有两个文件,mysshkey.pub以及mysshkey. mysshkey.pub是你的公钥,这个可以安全地放在远程服务器上。mysshkey是您的私人密码的钥匙,它是不是安全的把远程服务器上(或某个其他人可以得到一个副本)。

在您希望通过 SSH 连接的服务器上:

  1. 登录到远程服务器
  2. mkdir -p ~/.ssh
  3. 将内容复制粘贴mysshkey.pub~/.ssh/authorized_keys
  4. 确保这~/.ssh/authorized_keyschmod'd600

现在,要在本地机器上运行它,请运行以下命令:

ssh -i ~/.ssh/mysshkey <remote_server_ip>
Run Code Online (Sandbox Code Playgroud)

并且您将登录而不提示输入密码。

这是管理自动登录的一种更可取的方法,因为您最终不会将密码硬编码到多个地方,如果您更改密码,则需要更新这些地方。

  • 有时您无法向远程主机添加密钥,例如网络设备。 (17认同)
  • 我会使用 RSA 密钥而不是 DSA。但除此之外,完全同意。 (2认同)

小智 21

在基于 Debian 的发行版上,该sshpass软件包提供了一种更简单的方式来做你想做的事。该软件包可用于许多其他流行的发行版。您需要先设置它:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt
Run Code Online (Sandbox Code Playgroud)

然后从这样的脚本调用 SSH 命令:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 root@172.31.72.103
Run Code Online (Sandbox Code Playgroud)

与使用expect.


小智 8

你可以使用这个:

sshpass -p 'yourpassword'  ssh user@ip
Run Code Online (Sandbox Code Playgroud)


小智 8

首先安装sshPass sudo apt-get install sshpass

然后在 .bashrc 文件中创建一个别名作为

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'
Run Code Online (Sandbox Code Playgroud)

现在通过以下方式重新加载更改的 .bashrc 文件 source ~/.bashrc

你现在已经完成了。

现在您可以sshLogin在终端中使用上面创建的别名运行 ssh 。