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

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

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

set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect 
{
   "[email protected]'s password" 
   {
      send "password\r" 
   }
}

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

答案1

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

#!/usr/bin/expect

spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact

我想interact你的脚本中可能缺少这个。

答案2

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

按着这些次序:

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

现在您的目录中将有两个文件~/.sshmysshkey.pub以及mysshkey.mysshkey.pub是您的公钥,可以安全地将其放在远程服务器上。mysshkey是您的私人无密码密钥,它是不是可以安全地放在远程服务器上(或者其他人可以获得副本的地方)。

在您希望通过 SSH 访问的服务器上:

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

现在,要在本地计算机上将其付诸实践,请运行以下命令:

ssh -i ~/.ssh/mysshkey <remote_server_ip>

您将在不提示输入密码的情况下登录。

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

答案3

在基于 Debian 的发行版上,该sshpass软件包提供了一种更简单的方法来完成您想要的操作。该软件包可用于许多其他流行的发行版。您需要先进行设置:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

然后从脚本中调用 SSH 命令,如下所示:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]

与使用expect.

答案4

首先安装sshPasssudo apt-get install sshpass

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

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

现在重新加载更改后的 .bashrc 文件source ~/.bashrc

现在你已经完成了。

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

相关内容