UNIX ssh脚本,在远程服务器上运行命令

UNIX ssh脚本,在远程服务器上运行命令,unix,shell,ssh,command,remote-server,Unix,Shell,Ssh,Command,Remote Server,我想创建一个脚本,自动登录到远程服务器并获取服务器上的文件。脚本已登录到服务器,但该命令未在该计算机上运行。一旦我断开与远程服务器的连接,这些命令就会在客户机上运行 !/bin/sh ssh -o PreferredAuthentications=publickey brjones@server.com cd ~/folder "i would like to grab file and copy it to client machines folder" 编辑:我不确定您是否注意到了,但我使

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

!/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连接来传递命令。

您应该使用(“安全拷贝”)而不是(“安全外壳”)。

为什么不使用?

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

sshbrjones@server.com杜福什

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


但是,对于您的情况,看起来您真正需要的是SCP。

您应该以这种方式使用
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 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-o PreferredAuthentications=publickeybrjones@server.comhello.txt
...
EOT

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


您可能需要在引用或转义方面多做一些工作,但它完成了任务,只需与远程设备建立一个连接,脚本就保持在本地。

除了铁门的答案外,您当然可以通过以下方式从本地脚本发送命令:

ssh thehost < commands.sh
ssh thehost
如果要在本地主机上存在的远程主机上调用脚本

ssh远程Password@remoteHostname


如果要调用已在远程主机上的脚本


ssh远程Password@remoteHostname“$PATH\u OF_SCRIPT/remoteScript.sh”

我正在使用ssh进行远程连接,但没有输入密码,如果我使用scp,它将要求输入密码……有没有办法使用scp命令进行密钥授权?scp在幕后使用ssh。您可以使用-o选项将任何参数传递给ssh(如PreferredAuthentication)。我想知道您是否可以查看我的编辑并告诉我您的想法,或者是否可以将密钥授权用于SCP。公钥授权可以通过两个步骤完成。(1) 使用ssh-keygen创建密钥对,然后,(2)将公钥行复制到服务器上的
authorized_-keys
文件中;出现在
~/.ssh/
目录中。@brjones,这个参考应该会有帮助,如果你坚持通过ssh执行命令,你必须在每个命令前面加一个
sshuser@serverexec
短语。但是,我想知道的是——您是否使用上面的“get file”示例作为参考?而且,您有一系列更复杂的命令要以这种方式执行?公钥授权可以在客户端上使用ssh keygen设置,在服务器上使用authorized_keys文件(我在下面的回答中给出了一个参考链接)。为什么它应该是
,而不是
in
ssh主机的cd/tmp;ls;回声你好世界,我是
hostname
'