在 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"
我检查了 combing multiple commands when using ssh and scp 的答案;基于此,我仍然需要 3 次登录,一次用于第一个 ssh 和 mkdir,一次用于 scp,一次用于 ssh 和 运行 shell 脚本。
有更好的解决方案吗?
使用 GNU tar
和 ssh
:
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
。
Use public/private keys instead of password authentication. Not only will this simplify the use of ssh
, it is much more secure, especially after you disallow password authentication on the server 您正在连接。使用密码身份验证意味着您 将 被黑客入侵,或者您的服务器已被入侵而您还不知道。此答案的其余部分假设您已设置 public/private 键。
我看到你在 /test
中有文件。不要将您的工作放在根目录中,这会引发安全问题。相反,除非您有正确设置权限的经验,否则请在您的主目录中工作。
因为 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"
有什么方法可以将以下命令合并为一个命令吗?我不想每次都为每个命令登录。
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"
我检查了 combing multiple commands when using ssh and scp 的答案;基于此,我仍然需要 3 次登录,一次用于第一个 ssh 和 mkdir,一次用于 scp,一次用于 ssh 和 运行 shell 脚本。
有更好的解决方案吗?
使用 GNU tar
和 ssh
:
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
。
Use public/private keys instead of password authentication. Not only will this simplify the use of
ssh
, it is much more secure, especially after you disallow password authentication on the server 您正在连接。使用密码身份验证意味着您 将 被黑客入侵,或者您的服务器已被入侵而您还不知道。此答案的其余部分假设您已设置 public/private 键。我看到你在
/test
中有文件。不要将您的工作放在根目录中,这会引发安全问题。相反,除非您有正确设置权限的经验,否则请在您的主目录中工作。因为
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"