从 Windows 批处理文件自动执行远程 Linux 命令的 10 个 PuTTY PLINK 示例
Plink 代表 PuTTY 链接。
Plink 是 PuTTY 的配套命令行实用程序。
在一个非常高的层次上:
- 使用 PuTTY 进行从 Windows 到 Linux 服务器的交互式 SSH 会话
- 使用 Plink 进行非交互式 SSH 会话以从 Windows 执行远程 linux 命令以实现自动化目的
在本教程中,我们将讨论以下内容:
- 从命令提示符启动 plink
- Plink 交互式 SSH 会话
- Plink 非交互式 SSH 会话以执行远程命令
- 从 Windows 文件执行多个 Linux 命令
- 指定连接协议
- 指定 SSH 密码作为 Plink 参数
- 调试 Plink 问题
- 将 SSH 端口指定为 Plink 选项
- SSH 连接的 Plink 日志文件
- 指定 SSH 协议(SSH-1 或 SSH-2)
- 指定 IP 协议(IPv4 或 IPv6)
- 通过 Plink 使用私钥文件进行身份验证
- Plink SSH 的其他启用和禁用选项
- 带有 Plink 的指纹和 HostKey
- Windows 批处理文件的 Plink -batch 选项
首先,从这里下载 plink 可执行文件。
如果您的机器上还没有安装 PuTTY,请确保您还下载了 putty 可执行文件和 plink。
如果您有 32 位 Windows 笔记本电脑,请确保下载 32 位版本的 plink。如果没有,请下载 64 位版本。
1. 从命令提示符启动 plink
您不能只是双击 plink.exe 来启动它。由于这是一个仅限命令行的实用程序(没有 GUI),您应该首先启动您的 Windows 命令提示符。
为此,请单击 Windows 上的开始菜单,然后在搜索框中键入“cmd.exe”并按 Enter,这将启动 Windows 命令提示符。
此外,根据您下载 plink.exe 的位置,您可能需要相应地修改 Windows 的 PATH 变量。
转到“系统属性”窗口,单击“环境变量”,选择路径变量,并在此处附加 plink.exe 所在的目录。
或者,您可以只设置 PATH 变量,如下所示。在以下示例中,我已将 plink.exe 下载到 C:\Downloads 目录。
set PATH=%PATH%;C:\Downloads
接下来,在命令提示符下键入 plink,这将显示可用的各种选项。
2. Plink 交互式 SSH 会话
以下是 plink 的基本语法:
plink [options] connection [command]
在上面的语法中:
- options - 您可以将各种选项传递给 plink。这是可选的。
- connection –这将包含您要连接的 Linux 服务器的连接信息。以下示例中说明了各种连接方法。
- command – 这是应该在远程 Linux 服务器上执行的命令。这是可选的。
虽然该命令是可选的,但当您不提供它时,它将显示一个原始交互式会话,该会话将在屏幕上显示许多不可打印的非可读字符。如前所述,plink 并不打算用作交互式会话。使用腻子进行交互式会话。
现在,让我们看看使用连接的各种方法。
首先,您可以只提供远程服务器的 IP 地址。然后,这将要求输入用户名和密码以登录。
C:\>plink 192.168.101.1
login as: root
root@192.168.101.1's password:
或者,您也可以使用 @ 符号使用用户名,如下所示。这将只要求输入密码,因为我们已经指定了用户名。
C:\>plink root@192.168.101.1
Using username "root".
root@192.168.101.1's password:
您还可以使用 -l 选项传递用户名,如下所示:
C:\>plink 192.168.101.1 -l mysql
您还可以使用现有 putty 会话的名称。在此示例中,我使用了名为“devdb”的现有保存的腻子会话。这是推荐的使用方式,因为您可以将 PuTTY 中的所有配置信息带到这里,用于这个特定的“devdb”会话。
C:\>plink devdb
Using username "root".
root@192.168.101.1's password:
下面的 -load 和上面的完全一样。
C:\>plink -load devdb
Using username "root".
root@192.168.101.1's password:
正如你在下面看到的,一旦你登录,你会得到一个命令提示符。但是,在这里做任何事情都会显示一些非用户友好的字符。
C:\>plink devdb
Using username "root".
root@192.168.101.1's password:
?]0;root@devdb:~[root@devdb ~]#
?]0;root@devdb:~[root@devdb ~]#
?]0;root@devdb:~[root@devdb ~]# ?[Kls -altr
total 326432
drwx------. 2 root root 4096 Jan 23 2016 ?[01;34m.ssh?[0m
drwxr-xr-x. 2 root root 4096 May 9 2016 ?[01;3Documents?[0m
drwxr-xr-x. 2 root root 4096 May 8 12:41 ?[01;3Downloads?[0m
?[m?]0;root@devdb:~[root@devdb ~]#
同样,对于交互式 SSH 会话,请使用 PuTTY。
在相关说明中,即使您已经使用 PuTTY 一段时间,您可能会发现这里的一些提示很有帮助:您可能不知道的 10 个很棒的 PuTTY 提示和技巧
3. Plink Non-Interactive SSH Session 执行远程命令
使用 plink,从 windows 中,您可以在 Linux 服务器上执行命令而无需任何用户交互,并且只显示输出。
为此,将命令作为最后一个参数传递给 plink,如下所示。
在以下示例中,它将在远程服务器上执行“crontab -l”命令并显示输出。
C:\>plink root@192.168.101.1 crontab -l
no crontab for root
如果要执行多个命令,请将它们组合在一起,如下所示。
C:\>plink root@192.168.101.1 (hostname;crontab -l)
devdb.thegeekstuff.com
no crontab for root
以下将在远程 Linux 服务器上执行 db-backup.sh shellscript。但是,您是从您的 Windows 机器启动的。
plink mysql@192.168.101.1 /root/bin/db-backup.sh
需要记住的几点:
- 如果上述命令要求输入密码,并且您不希望这种情况发生,则应适当设置公私钥身份验证,以便远程 Linux 服务器不要求输入密码。
- 您还可以将密码作为命令行选项传递给 plink,如下面的示例之一所示。
- 此外,如果上面显示有关无效协议的错误消息,那么您应该传递适当的协议,如下例所示。
4. 从一个 Windows 文件执行多个 Linux 命令
除了在 plink 命令行中指定要在远程 Linux 服务器上执行的所有命令之外,您还可以将它们放在一个文本文件中,并将该文件指定为 plink 的参数。
例如,在您的 Windows 上创建以下名为 commands.txt 的文件。
C:\>type commands.txt
hostname
service mysql stop
yum -y install httpd
service mysql start
service httpd start
crontab -l
现在要在远程 Linux 服务器上依次执行上述所有命令,请在 Windows 笔记本电脑上执行以下 plink 命令。
C:\>plink root@192.168.101.1 -m C:\commands.txt
5.指定连接协议
Plink 允许以下协议:SSH、Telnet、远程登录 (rlogin)、Raw、串行连接
最流行和默认的是 SSH。使用 -ssh 如下所示。
C:\>plink -ssh root@192.168.101.1
对于远程登录:
C:\>plink -telnet root@192.168.101.1
对于使用 rlogin 的远程登录:
C:\>plink -rlogin root@192.168.101.1
对于生:
C:\>plink -raw root@192.168.101.1
SSH-2.0-OpenSSH_5.3
如果您尝试指定特定协议,并且收到“FATAL ERROR: Network error: Connection refused”错误,则表示远程服务器不支持指定的协议。
如果您不想在命令行上指定协议:
- 您可以使用已保存的 PuTTY 会话,该会话已经为该特定会话定义了协议。
- 或者,您可以使用名为 PLINK_PROTOCOL 的 Windows 环境变量并相应地设置值,plink 将使用该值。
6. 指定 SSH 密码作为 Plink 参数
如果您没有基于密钥的身份验证设置,则可以在命令行中将密码作为参数传递。不用说这种方法是不推荐的。
这将使用 -pw 选项指定的密码以 root 身份连接到服务器,并执行所有给定的 Linux 命令并在 Windows 命令提示符上显示输出。
C:\>plink root@192.168.101.1 -pw SecretRootPwd (date;hostname;ls -l)
当然,简单的方法是使用保存的 putty 会话(例如 devdb),而不是指定用户名和 ip-address,如下所示。
C:\>plink devdb -pw SecretRootPwd (date;hostname;ls -l)
7. 调试 Plink 问题
首先,确保您拥有最新版本的 plink。使用 -V 选项(大写 V),如下所示。当前稳定版本为 0.69
C:\>plink -V
plink: Release 0.69
Build platform: 64-bit Windows
Compiler: Visual Studio 2015 / MSVC++ 14.0 (_MSC_VER=1900)
Source commit: b1829b81b5c0d12dcc91f6b50b0b4d83c3df6a8e
接下来,使用 -v 选项(小写 v)如下所示以获得更详细的输出。
C:\>plink -v devdb service httpd restart
Connecting to 192.168.101.1 port 22
We claim version: SSH-2.0-PuTTY_Release_0.69
Server version: SSH-2.0-OpenSSH_5.3
We believe remote version has SSH-2 channel request bug
Using SSH protocol version 2
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Server also has ssh-dss host key, but we don't know it
Host key fingerprint is:
ssh-rsa 2048 2f:d2:c1:7f:db:a1:16:21:d2:f4:31:f9:ae:96:be:89
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Using username "root".
Using SSPI from SECUR32.DLL
Attempting GSSAPI authentication
GSSAPI authentication request refused
Sent password
Access granted
Opening session as main channel
Opened main channel
Started a shell/command
..
Server sent command exit status 0
Disconnected: All channels closed
8. 指定 SSH 端口作为 Plink 选项
默认情况下,SSH 将连接到端口 22。但是,在您的 Linux 服务器上,如果 SSH 配置为在不同的端口上运行,则使用 plink 中的 -P 选项指定端口。
在以下示例中,plink 将连接到远程 Linux 服务器的 25 端口。
C:\>plink root@192.168.101.1 -P 25 crontab -l
当您使用已保存的 PuTTY 会话和 -P 选项时,它不会使用已保存会话中的端口,而是使用给定的端口。
C:\>plink devdb -P 25 crontab -l
9. SSH 连接的 Plink 日志文件
对于 Plink 中的 SSH 协议,有几个有用的日志记录选项。
以下 –sshlog 选项会将日志保存在给定文件 (sshlog.txt) 中。
C:\>plink devdb -sshlog sshlog.txt (date;hostname;ls -l)
这是 sshlog.txt 输出的部分内容
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2017.05.11 11:40:57 =~=~=~=~=~=~=~=~=~=~=~=
Event Log: Writing new session log (SSH packets mode) to file: sshlog.txt
Event Log: Connecting to 192.168.101.1 port 22
Event Log: We claim version: SSH-2.0-PuTTY_Release_0.69
Event Log: Server version: SSH-2.0-OpenSSH_5.3
Event Log: We believe remote version has SSH-2 channel request bug
Event Log: Using SSH protocol version 2
Outgoing packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
00000000 ed 8e ff c9 d3 67 cf 95 0e 8f 1a 4d 6d 65 6f 25 .....g.....Mmeo%
00000010 00 00 00 f0 63 75 72 76 65 32 35 35 31 39 2d 73 ....curve25519-s
......
Outgoing packet #0xc, type 96 / 0x60 (SSH2_MSG_CHANNEL_EOF)
00000000 00 00 00 00 ....
Outgoing packet #0xd, type 97 / 0x61 (SSH2_MSG_CHANNEL_CLOSE)
00000000 00 00 00 00 ....
Event Log: Disconnected: All channels closed
如需更详细的日志,请使用 -sshrawlog 选项。请注意,它的文件大小将比上述更大,因为这将在日志文件中存储更多信息。
此外,这将需要比上述命令更长的执行时间,因为 sshrawlog 选项收集的日志信息比常规 sshlog 选项多。
C:\>plink devdb -sshrawlog sshrawlog.txt (date;hostname;ls -l)
10. 指定 SSH 协议(SSH-1 或 SSH-2)
默认情况下,它将使用 SSH-2 协议,也可以使用 -2 选项指定,如下所示。
C:\>plink devdb -2 (hostname;ls -l)
devdb.thegeekstuff.com
total 326380
对于 SSH-1 协议,使用 -1 选项,如下所示。如果您的服务器不支持它,您将收到以下错误。
C:\>plink devdb -pw -1 (hostname;ls -l)
FATAL ERROR: SSH protocol version 1 required by our configuration but not provided by server
11. 指定 IP 协议(IPv4 或 IPv6)
默认情况下,它将使用 IPv4,也可以使用 -4 选项指定,如下所示。
C:\>plink devdb -4 (hostname;ls -l)
要使用 IPv6,请使用 -6 选项,如下所示。
C:\>plink devdb -6 (hostname;ls -l)
12. Plink 使用私钥文件进行身份验证
使用 -i 选项指定应用于身份验证的私钥文件的位置。
在以下示例中,它将使用 C:\Downloads 目录中的 devdb.ppk 文件。
C:\>plink -i "C:\Downloads\devdb.ppk" root@192.168.101.1 hostname
注意:如果给定的密钥未正确配置为与您的 Linux 服务器一起使用,您将收到“服务器拒绝我们的密钥”。
如果未找到密钥文件(例如,当您提供错误的目录名称时),您将收到以下错误:
C:\>plink -i "D:\Data\devdb.ppk" root@192.168.101.1 hostname
Unable to use key file "C:\Users\ramesh\Downloads\devdb.ppk" (unable to open file)
root@192.168.101.1's password:
如果您指定格式不正确的 Key,您将收到以下错误消息。
C:\>plink -i "C:\Downloads\devdb.key" root@192.168.101.1 hostname
Unable to use key file "C:\Downloads\devdb.key" (OpenSSH SSH-2 private key (old PEM format))
13. Plink SSH 的附加启用和禁用选项
您还可以使用以下 plink SSH 选项:
- -X 启用 X11 转发
- -X 禁用 X11 转发
- -A 启用代理转发
- -a 禁用代理转发
- -t 启用 pty 分配
- -T 禁用 pty 分配
- -noagent 禁止使用 Pageant
- -agent 启用 Pageant 的使用
- -C 启用压缩
14.指纹和HostKey与Plink
使用 -pgpfp 选项将显示 PuTTY 的 PGP 指纹详细信息。通常,您可以使用它来建立从 plink.exe 可执行文件到您尝试连接的另一个程序或可执行文件的信任。
C:\>plink -pgpfp
PuTTY Master Key as of 2015 (RSA, 4096-bit):
440D E3B5 B7A1 CA85 B3CC 1718 AB58 5DC6 0467 6F7C
Original PuTTY Master Key (RSA, 1024-bit):
8F 15 97 DA 25 30 AB 0D 88 D1 92 54 11 CF 0C 4C
Original PuTTY Master Key (DSA, 1024-bit):
313C 3E76 4B74 C2C5 F2AE 83A8 4F5E 6DF5 6A93 B34E
此外,您可以使用 plink 中的 hostkey 相应地使用 -hostkey 选项连接到远程服务器。
C:\>plink devdb -hostkey aa:dd:b1:f1:f8:00:4c:36:63:ec:cf:92:16:e6:df:26 hostname
15. Windows 批处理文件的 Plink -batch 选项
如果您在 Windows 批处理文件中运行 plink,则建议您使用 -batch 选项。
C:>plink -batch devdb [complex-linux-command]
在上面的例子中,如果 complex-linux-command 失败,或者要求用户输入,或者挂起等,那么你的 Windows 批处理脚本将不会等待。相反,plink 只会放弃命令,批处理脚本会失败。
这可能是您期望发生的事情,而不是您的 Windows 批处理文件作业只是等待或挂起。
因此,当您使用 plink 编写 Windows 批处理脚本时,请在 plink 中使用 -batch 选项。
- 点赞
- 收藏
- 关注作者
评论(0)