通过ssh运行多个命令并将输出存储在不同的文件中

时间:2012-06-01 13:02:35

标签: bash unix ssh command

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

我正在使用此代码

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

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

9 个答案:

答案 0 :(得分: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' .

答案 1 :(得分:3)

不,你必须在单独的命令(多次登录)中单独进行,如@lanzz已经提到的那样。要将输出保存在本地,请执行

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

如果您希望在单个登录中运行多个命令,则在脚本中记下所有命令,然后通过SSH运行该脚本,而不是运行多个命令。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

你可以这样做。假设您可以将远程计算机的身份验证设置回本地计算机,则可以使用ssh来管理命令的输出。诀窍是让反斜杠正确。

ssh remotehost command1 \| ssh localhost cat \\\> command1.txt \; command2 \| ssh localhost cat \\\> command2.txt 

答案 4 :(得分:1)

选项1.告诉你的老板他很傻。当然,除非他不是,并且有充分理由在一次会议中需要这一切。出于某种原因,这种情况逃脱了我的想象。

选项2.为什么不tar?

ssh -i my_key user@ip 'command1 > out1; command2 > out2; tar cf - out*' | tar xf -

答案 5 :(得分:0)

使用&&&所以你可以像这样拥有它

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

希望这有帮助

答案 6 :(得分:0)

我能够,这里完全我做了什么:

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

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

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

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

答案 7 :(得分: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

答案 8 :(得分:-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 Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU / Linux nisclient2

    OR

[root @nismaster~] #ssh 192.168.122.169“uname -a&amp;&amp; hostname” root@192.168.122.169的密码: Linux nisclient2 2.6.18-164.el5#1 SMP Tue Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU / Linux nisclient2