2016-02-13 225 views
0

在stackoverflow上也有类似的问题,但它们要么没有答案,要么使用某种语言(C#,Python,...)。我试图使用ssh在远程机器上执行命令,并将控制台输出回到本地机器。下面是我有问题的命令:在远程计算机上执行shell脚本中的命令并在本地计算机上获取输出

sshpass -p $password 'find /home/pi/Transmission_Downloads/ -type f \(-iname "*.mp4" -o -iname "*.mkv" -o -iname "*.avi" \) -newermt "2016-02-01"' [email protected] 

当我尝试执行我的剧本里我得到“sshpass:无法运行命令:没有这样的文件或目录”错误。

我想实现的目标:从服务器获取下载的新文件列表(电影和电视节目),以便以后使用rsync从服务器上拉取它们。

有没有一种方法可以仅使用密码来实现此目的,还是我必须使用公钥/私钥来访问服务器?

我的本地机器使用的是Ubuntu 14.04(桌面),我的服务器正在运行Raspbian。

回答

1

设置密码,减少登录到远程计算机可能是轻松完成任务的解决方案。

首先以用户a的身份登录Sys_A并生成一对认证密钥。不要输入密码:

[email protected]_A:~> ssh-keygen -t rsa 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa. 
Your public key has been saved in /home/a/.ssh/id_rsa.pub. 
The key fingerprint is: 
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 [email protected] 

现在使用ssh在Sys_B上以用户b的身份创建一个目录〜/ .ssh。 (该目录可能已经存在,这是很好的):

[email protected]_A:~> ssh [email protected] mkdir -p .ssh 
[email protected]_B's password: 

最后追加的新的公共密钥到B @ Sys_B:.ssh/authorized_keys和输入B的密码是最后一次:

[email protected]_A:~> cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys' 
[email protected]_B's password: 

从现在起你可以登录到Sys_B从Sys_A b,为无密码:

[email protected]_A:~> ssh [email protected]_B 

然后你就可以在bash脚本集成你的命令,并使用ssh无需任何用户交互。

+0

问题是我将不得不为每台计算机创建公钥/私钥把文件拉到。有没有办法使用密码来实现这个(例如sshpass)? –

+0

做这件事的另一种方法可能是'expect',请参阅:[在bash脚本中使用expect来为SSH命令提供密码](http://stackoverflow.com/questions/4780893/use-expect-in-bash-脚本到提供密码到SSH命令)。你处理多少台电脑?对于5-10台计算机,设置SSH密钥将非常快速,其余部分非常简单。而且最重要的是SSH密钥比通过网络发送原始密码更安全。 –

+0

它只是我,还是使用SSH密钥在auth期间添加了一个小的延迟(1〜3秒)? –

相关问题