3

我已经设置了我的公钥和私钥并进行了自动 ssh 登录。我想在一个登录会话中执行两个命令,例如 command1 和 command2,并将它们存储在本地计算机上的文件 command1.txt 和 command2.txt 中。

我正在使用此代码

ssh -i my_key user@ip 'command1 command2'并且这两个命令在一次登录中执行,但我不知道如何将它们存储在 2 个不同的文件中。

我想这样做是因为我不想重复 ssh 到我的远程主机。

4

9 回答 9

5

除非您可以解析两个命令的实际输出并区分哪个是哪个,否则您不能。您将需要两个单独的 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' .
于 2012-06-01T13:06:45.603 回答
3

不,您必须在@lanzz 已经提到的单独命令(多次登录)中单独执行此操作。要将输出保存在本地,请喜欢

ssh -i my_key user@ip "command1" > .\file_on_local_host.txt

如果您想在一次登录中运行多个命令,然后将所有命令记入脚本中,然后通过 SSH 运行该脚本,而不是运行多个命令。

于 2012-06-01T13:18:45.353 回答
3

这是可能的,但可能比它的价值更麻烦。如果您可以生成保证不会出现在 command1 输出中的唯一字符串,则可以执行以下操作:

$ ssh remote 'cmd1; echo unique string; cmd2' |
  awk '/^unique string$/ { output="cmd2"; next } { print > output }' output=cmd1

这只是开始打印到文件cmd1,然后cmd2在看到唯一字符串时将输出更改为文件。您可能还想处理 stderr 。这留给读者作为练习。

于 2012-06-01T15:03:38.070 回答
1

你可以这样做。假设您可以设置从远程计算机返回到本地计算机的身份验证,您可以使用 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' 
于 2013-09-18T22:21:08.857 回答
1

选项 1. 告诉你的老板他很傻。除非,当然,他不是,并且有一个关键原因需要在一次会议中全部完成。出于某种原因,这种情况超出了我的想象。

选项 2. 为什么不焦油?

ssh -i my_key user@ip 'command1 > out1; command2 > out2; tar cf - out*' | tar xf -
于 2014-02-07T20:46:54.223 回答
0

使用 && 加入他们,这样你就可以拥有它

ssh -i my_key user@ip "command1 > command1.txt && command2 > command2.txt && command3 > command3.txt"

希望这可以帮助

于 2012-06-01T13:08:45.523 回答
0

我能够做到,这正是我所做的:

ssh root@your_host "netstat -an;hostname;uname -a"

这会按顺序执行命令并将它们完美地放在我的屏幕上。

确保以引号开始和结束,否则它将远程运行第一个命令,然后对本地计算机运行其余命令。

我的服务器有一个 rsa 密钥对,所以如果你想避免凭证检查,那么显然你必须制作那对。

于 2013-09-16T16:30:25.080 回答
0

我认为这就是你需要的:首先你需要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
于 2014-01-25T09:47:29.080 回答
-2

如何使用单个 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

于 2013-06-07T06:05:21.027 回答