我已经设置了我的公钥和私钥,并具有自动ssh登录功能。我想在一个登录会话中执行两个命令,例如command1和command2,并将它们存储在本地计算机上的文件command1.txt和command2.txt 中。
我正在使用此代码
ssh -i my_key user@ip 'command1 command2'
这两个命令在一次登录中执行,但我不知道如何将它们存储在2个不同的文件中。
我想这样做,因为我不想反复ssh到我的远程主机。
答案 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