我想创build一个脚本,自动login到远程服务器,并抓取服务器上的文件。 该脚本已经login到服务器,但是该命令不在该机器上运行。 一旦从远程服务器断开连接,命令就在客户机上运行。
!/bin/sh ssh -o PreferredAuthentications=publickey brjones@server.com cd ~/folder "i would like to grab file and copy it to client machines folder"
编辑:我不知道,如果你注意到,但我用密码连接到远程服务器使用ssh和keygeneration。 我很欣赏这个想法,但是我正在寻找可能的命令,或者在客户端用脚本在远程服务器上运行命令。 我意识到,远程服务器不能访问客户端脚本,但我很好奇,如果有可能通过SSH连接pipe道命令。
你应该使用scp (“secure copy”)而不是ssh (“secure shell”)。
另外,如果您不希望在远程服务器上有可用的脚本,请尝试以下操作:
ssh thehost 'cd /tmp; ls; echo Hello world, I am `hostname`'
和无SCP的复制:
ssh localhost 'cat /bin/bash' > local_bash
如果你的目标只是传输文件,你应该使用scp。 但是要在远程主机上执行一些命令,而不在该远程主机上使用特定的脚本,则可以简单地使用stdin,如下所示:
!/bin/sh ssh -o PreferredAuthentications=publickey brjones@server.com << EOT cd ~/folder echo "hello" > hello.txt ... EOT
你应该以这种方式使用ssh
在远程机器上执行脚本,
ssh user@server exec /path/to/script/script.sh
其中script.sh
在user
登录的给定路径上的服务器上可用。
如果脚本不在服务器上,但在本地计算机上可用(并且两台计算机之间没有共享的NFS共享空间),则应该使用scp
发送脚本,
scp script.sh user@server:/path/to/script/
现在,为了获得一个服务器文件的具体情况,你应该执行,
scp user@server:/path/to/file/filename .
像其他一些答案已经建议。
在脚本中的SSH不起作用。 但是,它具有通过将命令指定为ssh的参数在远程服务器上执行命令的功能,如下所示:
ssh brjones@server.com do_foo.sh
将在服务器上运行do_foo.sh脚本
然而对于你的情况,看起来你真正想要的是SCP。
除了铁门的回答,当然你可以用你的本地脚本来管理命令:
ssh thehost < commands.sh
SCP? 远程是具有只读文件系统的设备。 我不想把脚本留在后面,或者使用多个ssh调用来清理它,或者多次调用一次执行一行。 名单继续…
Yarek T在这里很好的解决方案:
您可能需要使用引号或转义进行游戏,但可以完成工作,只需连接到远程,脚本保持在本地。
为什么不使用scp ?
有几个人已经解释了如何做更好,更容易的特定例子。
如果你真的需要脚本远程交互,你可以考虑使用expect
。
如果你想调用远程主机上的一个脚本,它存在于localhost上
ssh remote Password@remoteHostname < localScript.sh
如果你想调用已经在远程主机上的脚本
ssh remote Password@remoteHostname "$PATH_OF_SCRIPT/remoteScript.sh"