linux - 在 shell 脚本中结合 ssh 和 scp 命令

标签 linux bash shell ssh scp

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

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 脚本。

有没有更好的解决方案?

最佳答案

  1. Use public/private keys而不是密码验证。这不仅会简化 ssh 的使用,而且更加安全,尤其是在您 disallow password authentication on the server 之后。你正在连接到。使用密码身份验证意味着您被黑客入侵,或者您的服务器已经受到威胁而您还不知道。本回答的其余部分假定您已设置公钥/私钥。

  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"

关于linux - 在 shell 脚本中结合 ssh 和 scp 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47984381/

相关文章:

c - 让 gcc 以 "int 0x80"方式编译系统调用?

linux - 关于 Makefile 的 bash shell

python - 用 Python 编写 Shell?

c - 如何在 C 中使用 fork() 创建倾斜树?

linux - grep 字符串在 n 行之前第一次出现,一旦与另一个字符串匹配

linux - 在 shell 脚本中使用变量时获取 shell 脚本的正确状态消息

linux - 限制对脚本运行开关的人的使用

linux - 如何将最后一列移动到第 n 列?

perl - 在 csh 中重定向 stderr 时出现问题

linux - 将来自一个 COM 端口的传入数据镜像到 Linux 上的虚拟 COM 端口