5

我想创建一个脚本,自动登录到远程服务器并获取服务器上的文件。该脚本已经登录到服务器,但是命令不在该机器上运行。一旦我与远程服务器断开连接,命令就会在客户端计算机上运行。

!/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 和密钥生成与远程服务器建立无密码连接。我很欣赏这些想法,但我希望使用客户端上的脚本在远程服务器上传输命令或运行命令。我意识到远程服务器无权访问客户端脚本,但是我很好奇是否可以通过 ssh 连接管道命令。

4

10 回答 10

14

您应该使用scp(“安全复制”)而不是ssh(“安全外壳”)。

于 2009-06-16T12:31:12.950 回答
14

此外,如果您不想在远程服务器上使用脚本,请尝试以下操作:

ssh thehost 'cd /tmp; ls; echo Hello world, I am `hostname`'

对于无 SCP 复制:

ssh localhost 'cat /bin/bash' > local_bash
于 2009-06-16T14:19:59.393 回答
5

如果您的目标只是传输文件,则应使用 scp。但是要在远程主机上执行一些命令而不在该远程主机上使用特定脚本,您可以像这样简单地使用标准输入:

!/bin/sh
ssh -o PreferredAuthentications=publickey brjones@server.com << EOT
cd ~/folder
echo "hello" > hello.txt
...
EOT
于 2009-06-17T09:46:11.360 回答
3

你应该用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 .

就像其他一些答案已经暗示的那样。

于 2009-06-16T12:33:12.930 回答
2

脚本中的 ssh 不能那样工作。但是,它确实能够通过将命令指定为 ssh 的参数来在远程服务器上执行命令,例如:

ssh brjones@server.com do_foo.sh

将在服务器上运行 do_foo.sh 脚本

但是,对于您的情况,您真正要寻找的是SCP。

于 2009-06-16T12:32:53.680 回答
2

除了 Tiemen 的回答之外,您当然可以使用以下命令从本地脚本中传输命令:

ssh thehost < commands.sh
于 2013-11-12T16:06:07.560 回答
1

SCP?Remote 是具有只读文件系统的设备。我不想留下脚本,或者使用 ssh 的多次调用来清理它,或者多次调用来一次执行一行。名单还在继续……

Yarek T 的绝佳解决方案:

您可能需要在引用或转义方面进行一些操作,但它可以完成工作,与远程的单个连接并且脚本保持在本地。

于 2011-02-02T02:28:13.327 回答
0

有几个人已经解释了如何更好、更容易地完成你给出的特定示例。

如果您确实需要编写远程交互脚本,您可以考虑使用expect.

于 2009-06-16T14:03:35.557 回答
0

为什么不使用scp

于 2009-06-16T12:31:43.747 回答
0

如果要在远程主机上调用脚本,该脚本存在于 localhost

ssh remote Password@remoteHostname < localScript.sh

如果你想调用一个已经在远程主机上的脚本

ssh remote Password@remoteHostname "$PATH_OF_SCRIPT/remoteScript.sh"

于 2015-05-13T10:47:05.297 回答