乐闻世界logo
搜索文章和话题

How to automatically enter SSH password with script

3 个月前提问
3 个月前修改
浏览次数7

1个答案

1

在日常的系统管理工作中,经常需要使用SSH访问远程服务器。自动化输入密码可以极大地简化重复性的登录任务。然而出于安全考虑,SSH默认并不支持直接在命令行中输入密码,因此需要用到一些特定的工具和方法来实现这一功能。以下是几种常见的方法:

1. 使用sshpass工具

sshpass 是一个非常有用的工具,它可以通过非交互方式提供密码给 ssh。它的使用非常简单:

bash
sshpass -p '你的密码' ssh 用户名@服务器地址

优点

  • 安装简单,使用方便。
  • 可以直接在脚本中使用。

缺点

  • 安全性较低,因为密码以明文形式出现在命令中。
  • 在某些系统中不推荐使用,因为它可能会暴露敏感的密码。

2. 使用Expect脚本

Expect是一个用于自动化控制交互式应用程序的工具,它可以模拟用户输入。你可以使用Expect来自动化SSH的密码输入过程:

bash
#!/usr/bin/expect set timeout 20 set host [lindex $argv 0] set user [lindex $argv 1] set password [lindex $argv 2] spawn ssh $user@$host expect "password:" send "$password\r" interact

保存这个脚本,执行时传入参数即可:

bash
./ssh_auto.exp 服务器地址 用户名 密码

优点

  • 非常灵活,可以处理复杂的交互逻辑。
  • 比较安全,尤其是结合加密工具使用。

缺点

  • 需要了解和编写Expect脚本。
  • 需要安装Expect软件。

3. 使用密钥认证

尽管不是直接使用密码,但设置SSH密钥认证是一种更安全,更高效的方法来自动化SSH登录。这通过生成一对公钥和私钥,将公钥放在服务器上,本地使用私钥进行认证:

bash
ssh-keygen -t rsa ssh-copy-id 用户名@服务器地址

登录时,就不需要密码了:

bash
ssh 用户名@服务器地址

优点

  • 非常安全,不需要在脚本中暴露密码。
  • 适用于长期的自动化任务。

缺点

  • 需要初期的设置。
  • 在某些环境中配置可能比较复杂。

综上,虽然可以使用如sshpass或Expect来自动输入密码,但出于安全和维护的考虑,通常推荐使用密钥认证来处理自动SSH登录的需求。如果必须使用密码,应尽可能保证密码的安全,例如通过权限控制、加密技术等方式保护脚本和密码。

2024年8月24日 17:51 回复

你的答案