从 Windows 批处理文件自动执行远程 Linux 命令的 10 个 PuTTY PLINK 示例

举报
Tiamo_T 发表于 2022/10/15 10:13:46 2022/10/15
【摘要】 Plink 代表 PuTTY 链接。 Plink 是 PuTTY 的配套命令行实用程序。

Plink 代表 PuTTY 链接。

Plink 是 PuTTY 的配套命令行实用程序。

在一个非常高的层次上:

  • 使用 PuTTY 进行从 Windows 到 Linux 服务器的交互式 SSH 会话
  • 使用 Plink 进行非交互式 SSH 会话以从 Windows 执行远程 linux 命令以实现自动化目的


在本教程中,我们将讨论以下内容:

  1. 从命令提示符启动 plink
  2. Plink 交互式 SSH 会话
  3. Plink 非交互式 SSH 会话以执行远程命令
  4. 从 Windows 文件执行多个 Linux 命令
  5. 指定连接协议
  6. 指定 SSH 密码作为 Plink 参数
  7. 调试 Plink 问题
  8. 将 SSH 端口指定为 Plink 选项
  9. SSH 连接的 Plink 日志文件
  10. 指定 SSH 协议(SSH-1 或 SSH-2)
  11. 指定 IP 协议(​​IPv4 或 IPv6)
  12. 通过 Plink 使用私钥文件进行身份验证
  13. Plink SSH 的其他启用和禁用选项
  14. 带有 Plink 的指纹和 HostKey
  15. 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 选项。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。