bash - 脚本中sshpass登录后执行命令

标签 bash shell ubuntu

我是 Ubuntu bash 新手。我使用 sshpass 成功登录到 sFTP 服务器.但是一旦建立连接,我还需要从服务器下载一个目录。我的脚本似乎无法通过连接线。这就是我的脚本 (.sh) 文件中的内容:

#!/bin/bash
sshpass -p 'MY_PASSWORD' sftp -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-dss MYUSER@MYSFTPSERVERADDRESS
echo "hello"
get -r Export

在上面的片段中,我的 echo和我的get不被执行。终端正在等待我的输入 sftp>迅速的。

最佳答案

使用 scp 会更好地为您服务而不是 sftp如果可以的话,共享 key 而不是将密码放入脚本中,但如果您必须使用 sftp出于某种原因,它可以从 heredoc 获取命令。喜欢:

sshpass -p 'MY_PASS' sftp -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-dss MYUSER@MYSFTPSERVERADDRESS <<EOF
get -r Export
EOF

请注意 echo不是有效的 sftp命令。

你可以放任何你想要的命令sftpEOF 之前执行它会依次执行它们。

如果您只想获取该目录,使用 scp 可能会更简单。如果你可以的话:
sshpass -p 'MY_PASSWORD' scp -o StrictHostKeyChecking=no -o HostKeyAlgorithms=+ssh-dss -r MYUSER@MYSFTPSERVERADDRESS:Export .

关于bash - 脚本中sshpass登录后执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458291/

相关文章:

linux - 优先级调度 OS bash 文件

OSX 上的 Java 文件限制低于 bash

python - 从两个文件中提取相同的行,同时忽略小写/大写

linux - Rgd 文件用 Null 替换单引号

linux - 如何在 Linux 上不打开浏览器从命令行执行 URL

linux - Bash - 格式化值

ubuntu - 右键单击弹出菜单在vscode中立即消失

apache - 错误为属于同一域的文件夹设置 VirtualHost

c - 两个进程之间的 FIFO 通信

linux - Bash 脚本自动化