sshpass 是 Linux 上的一个免输入密码通过 ssh 登录的方案,可以通过在命令行中指定密码,无需交互的方式完成一些自动化的动作。但是在 Windows 系统中并没有直接提供相关的支持。本篇文章针对这个思路探讨一下其他实现方式。

Win 安装 sshpass

在 github 上已有大神做了相关实现,项目为 sshpass-win32,但是是 win32 版本的,下载后安装即可实现 sshpass 功能。

通过 vbscript 进行相关的实现

vbscript 提供了一些自动化功能可以帮助实现 sshpass 的功能,代码如下:

Dim WshShell 
Set WshShell=WScript.CreateObject("WScript.Shell") 
' 创建一个 cmd 命令终端
WshShell.Run "cmd.exe"
WScript.Sleep 800 
' 输入 ssh root@192.168.1.1
WshShell.SendKeys "ssh root@192.168.1.1" & vbCr
' 休眠 800ms
WScript.Sleep 800 
' 输入密码
WshShell.SendKeys "123456" & vbCr

将上面的代码保存为 sshpass.vbs 文件然后双击执行,即可实现 ssh 免密登录。优点是代码简单,缺点是由于 WshShell.SendKeys 是控制当前系统输入的,所以要求预先将输入法调整为英文,并且脚本运行过程中不能操作系统,否则执行就会报错。

还可以将上面的脚本优化下,这样就可以在命令行中执行了:

Dim WshShell 
Set WshShell=WScript.CreateObject("WScript.Shell") 
' 休眠 800ms
WScript.Sleep 800 
' 输入 ssh root@192.168.1.1
WshShell.SendKeys "ssh " & WScript.Arguments.Item(0) & vbCr
' 休眠 800ms
WScript.Sleep 800 
' 输入密码
WshShell.SendKeys WScript.Arguments.Item(1) & vbCr

上述代码保存为 sshpass.vbs ,然后打开终端,执行 wscript sshlogin.vbs root@172.20.255.38 123456 ,然后稍等片刻,即可获得自动登录的界面。
在这里插入图片描述

通过 Putty 中的 plink 命令实现

Putty 中有个工具 plink ,可以实现免密登录以及执行命令

plink -l root -pw 123456 -P 22 -batch 172.20.251.1
# -l root 指定登录用户名
# -pw 123456 指定登录密码为 123456
# -P 22 指定登录端口为 22
# -batch 禁用交互提示(初次登录可能会导致报错)

在这里插入图片描述

使用 plink 在远程执行一个命令
# 在远程执行 ip addr 命令
plink -l root -pw 123456 -P 22 -batch 172.20.251.1 ip addr
# -l root 指定登录用户名
# -pw 123456 指定登录密码为 123456
# -P 22 指定登录端口为 22
# -batch 禁用交互提示(初次登录可能会导致报错)
使用 plink 在远程执行一个本地脚本

当前文件夹下有一个 script.sh 脚本,如果想要在远程执行该文件的话可以使用以下命令:

plink -l root -pw 123456 -P 22 -batch -m script.sh 172.20.251.1
# -sshlog log_file:将调试日志输出到指定的文件。
# -m file:指定一个文件,其中包含要在远程服务器上执行的命令。这允许批量执行命令。
使用 plink 向远程传输一个本地文件
plink -scp local_file username@hostname:remote_directory
# local_file 是本地系统上的文件路径。
# username 远程服务器上的用户名。
# hostname 是远程服务器的主机名或 IP 地址。
# remote_directory 是远程服务器上的目标目录,文件将上传到该目录中。

示例命令将本地系统上的 local_file 文件上传到远程服务器的 remote_directory 目录中。

请确保具有适当的权限和访问权限来执行文件传输操作。另外,如果远程服务器的 SSH 端口不是默认的 22 端口,可以使用 -P 参数指定正确的端口号。

注意,使用 Plink 进行文件传输时,有可能会收到有关文件权限、目录权限等方面的提示或警告。确保在远程服务器上具有适当的权限来执行所需的文件传输操作。

plink 通过代理访问

是的,Plink 支持代理设置,可以通过一些选项来配置代理服务器。下面是 Plink 中常用的代理设置选项:

  • -proxy[+|-] [proxy-type:]host[:port]:指定代理服务器的类型、主机和端口号。proxy-type 可以是以下之一:httphttpssocks4socks5。使用 + 号表示使用代理,使用 - 号表示不使用代理。例如,-proxy socks5:proxy.example.com:1080 表示使用 SOCKS5 代理服务器 proxy.example.com 的端口号 1080

  • -proxyusername username:指定连接代理服务器时的用户名。

  • -proxypassword password:指定连接代理服务器时的密码。同样,不建议在命令行中明文指定密码。

这些选项允许在连接到远程服务器时通过代理服务器进行通信。可以根据的代理服务器类型和配置选择适当的选项,并提供相应的主机、端口、用户名和密码。

可以通过运行 plink --help 命令或参考 Plink 的官方文档以获取更详细的代理设置选项和说明。

plink 与 vbs 结合使用

整个活,用 vbs 执行 plink 命令。

Dim WshShell 
Set WshShell=WScript.CreateObject("WScript.Shell") 
" 输入 ssh root@192.168.1.1
WshShell.SendKeys "plink -l root -pw " & WScript.Arguments.Item(1) _
& " " & WScript.Arguments.Item(0) & vbCr

参考资料

Logo

更多推荐