我已经设置了我的公钥和私钥并进行了自动 ssh 登录。我想在一个登录会话中执行两个命令,例如 command1 和 command2,并将它们存储在本地计算机上的文件 command1.txt 和 command2.txt 中。
我正在使用此代码
ssh -i my_key user@ip 'command1 command2'
并且这两个命令在一次登录中执行,但我不知道如何将它们存储在 2 个不同的文件中。
我想这样做是因为我不想重复 ssh 到我的远程主机。
除非您可以解析两个命令的实际输出并区分哪个是哪个,否则您不能。您将需要两个单独的 ssh 会话:
ssh -i my_key user@ip command1 > command1.txt
ssh -i my_key user@ip command2 > command2.txt
您还可以将输出重定向到远程计算机上的文件,然后将它们复制到本地计算机:
ssh -i my_key user@ip 'command1 > command1.txt; command2 > command2.txt'
scp -i my_key user@ip:'command*.txt' .
不,您必须在@lanzz 已经提到的单独命令(多次登录)中单独执行此操作。要将输出保存在本地,请喜欢
ssh -i my_key user@ip "command1" > .\file_on_local_host.txt
如果您想在一次登录中运行多个命令,然后将所有命令记入脚本中,然后通过 SSH 运行该脚本,而不是运行多个命令。
这是可能的,但可能比它的价值更麻烦。如果您可以生成保证不会出现在 command1 输出中的唯一字符串,则可以执行以下操作:
$ ssh remote 'cmd1; echo unique string; cmd2' |
awk '/^unique string$/ { output="cmd2"; next } { print > output }' output=cmd1
这只是开始打印到文件cmd1
,然后cmd2
在看到唯一字符串时将输出更改为文件。您可能还想处理 stderr 。这留给读者作为练习。
你可以这样做。假设您可以设置从远程计算机返回到本地计算机的身份验证,您可以使用 ssh 将命令的输出通过管道传回。诀窍是正确使用反斜杠。
ssh remotehost command1 \| ssh localhost cat \\\> command1.txt \; command2 \| ssh localhost cat \\\> command2.txt
或者如果你不是那么喜欢反斜杠......
ssh remotehost 'command1 | ssh localhost cat \> command1.txt ; command2 | ssh localhost cat \> command2.txt'
选项 1. 告诉你的老板他很傻。除非,当然,他不是,并且有一个关键原因需要在一次会议中全部完成。出于某种原因,这种情况超出了我的想象。
选项 2. 为什么不焦油?
ssh -i my_key user@ip 'command1 > out1; command2 > out2; tar cf - out*' | tar xf -
使用 && 加入他们,这样你就可以拥有它
ssh -i my_key user@ip "command1 > command1.txt && command2 > command2.txt && command3 > command3.txt"
希望这可以帮助
我能够做到,这正是我所做的:
ssh root@your_host "netstat -an;hostname;uname -a"
这会按顺序执行命令并将它们完美地放在我的屏幕上。
确保以引号开始和结束,否则它将远程运行第一个命令,然后对本地计算机运行其余命令。
我的服务器有一个 rsa 密钥对,所以如果你想避免凭证检查,那么显然你必须制作那对。
我认为这就是你需要的:首先你需要sshpass
在你的机器上安装。然后您可以编写自己的脚本:
while read pass port user ip; do
sshpass -p$pass ssh -p $port $user@$ip <<ENDSSH1
COMMAND 1 > file1
.
.
.
COMMAND n > file2
ENDSSH1
done <<____HERE
PASS PORT USER IP
. . . .
. . . .
. . . .
PASS PORT USER IP
____HERE
如何使用单个 ssh 连接在远程服务器上运行多个命令。
[root@nismaster ~]# ssh 192.168.122.169 "uname -a;hostname" root@192.168.122.169 的密码:Linux nisclient2 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux nisclient2
OR
[root@nismaster ~]# ssh 192.168.122.169 "uname -a && hostname" root@192.168.122.169 的密码:Linux nisclient2 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux nisclient2