繁体   English   中英

在shell脚本中组合ssh和scp命令

[英]combining ssh and scp command in shell script

有什么办法可以将以下命令合并到一个命令中吗? 我不想每次都为每个命令登录。

sshpass -p 'somepwd' ssh user@server "mkdir -p /home/user/test"
sshpass -p 'somepwd' scp file.sh user@server:/home/user/test
sshpass -p 'somepwd' scp /test/somefile.txt user@server:/home/user/test
sshpass -p 'somepwd' ssh user@server -C "cd /home/user/test;./file.sh"

在使用ssh和scp时,我确实检查了梳理多个命令的答案; 基于此,我仍然需要3个登录,一个用于第一个ssh和mkdir,一个用于scp,一个用于ssh并运行shell脚本。

有更好的解决方案吗?

  1. 使用公钥/私钥代替密码验证。 这不仅简化了ssh的使用,而且更加安全,尤其是在您连接的服务器上禁止密码验证之后。 使用密码身份验证意味着您被黑客入侵,或者您的服务器已经被入侵,而您还不知道。 本答案的其余部分假设您已设置公钥/私钥。

  2. 我看到你有/test文件。 不要将您的工作放在根目录中,这会引发安全问题。 而是在您的主目录中工作,除非您有正确设置权限的经验。

  3. 因为file.sh在您当前的目录中(无论是什么)并且您想要/test/的文件,所以您无法使用rsync 如果所有文件都存在于同一目录中,则rsync将是一个不错的选择。

这就是我们留下的东西; 我没有搞乱/test/的位置,因为我对这个任务不够了解:

ssh user@server "mkdir -p /home/user/test"
scp file.sh user@server:/home/user/test
scp /test/somefile.txt user@server:/home/user/test
ssh user@server -C "cd /home/user/test;./file.sh"

使用GNU tarssh

tar -c file.sh test/somefile.txt | sshpass -p 'somepwd' ssh user@server -C "tar -C / --transform 's|test/||;s|^|/home/user/test/|' --show-transformed-names -xv; cd /home/user/test; ./file.sh"

有关使用sshpass传递密码的更安全方法,请参阅man sshpass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM