sshfs 命令行中的用户名和密码

sshfs 命令行中的用户名和密码

我正在使用以下命令创建一个小型备份脚本sshfs

sshfs backup_user@target_ip:/home /mnt/backup

有没有办法在此命令中包含密码?

或者除了 FTP/SFTP 之外,还有其他可以包含登录密码的文件传输解决方案吗?

答案1

发送'sshfs password'<<<在 Bash 中工作-o password_stdin

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'

请注意,密码用单引号引起来。谢谢凯尔!

答案2

-o password_stdin似乎并不适用于所有系统,例如 freeBSD。

您还可以使用解释器expect ,它应该与 sshfs 一起使用并且应该可以解决问题。

另一个解决方案是sshpass,例如,假设您正在备份目录 /var/www

备份:

name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www

上传备份文件到备份服务器

sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name

所以它会上传带有今天备份的目录

不过,正如上文所说,最好的(安全且简单的)方法是使用 ssh 密钥对,
唯一的不便之处在于您必须在需要配对的每台服务器上都经历一次密钥生成过程,但这比在所有要备份的服务器上以纯文本格式保存密码要好 :),

以正确的方式生成密钥对

  • 在本地服务器上

    ssh-keygen -t rsa
    
  • 在远程服务器上

    ssh root@remote_servers_ip "mkdir -p .ssh"
    
  • 将生成的公钥上传到远程服务器

    cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
    
  • 在远程服务器上设置权限

    ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
    
  • 登录

    ssh root@remote_servers_ip
    
  • 启用 SSH 协议 v2

    取消注释 /etc/ssh/sshd_config 中的“协议 2”

  • 在 sshd 中启用公钥授权

    取消注释 /etc/ssh/sshd_config 中的“PubkeyAuthentication yes”

  • 如果 /etc/ssh/sshd_config 中的 StrictModes 设置为 yes,则

    restorecon -Rv ~/.ssh
    

答案3

根据手册,有一个选项-o password_stdin可能允许从标准输入读取密码,这可能是重定向。我从来没有用过它,所以我猜测。

也就是说,我强烈建议不要使用这种本质上不安全的解决方案。

ssh与私钥/公钥系统配合得很好。它简单又安全。无需输入密码或将其明文写入 shell 脚本中。只需将您的公钥推送到服务器上即可立即连接。

答案4

需要记住的一件事是,如果您使用该-o password_stdin选项,它可能看起来不起作用,因为 sshfs 会询问是否连接到主机(如果这是您第一次连接到它并且未添加)到已知的主机文件)。如果您批量运行它,您将永远不会看到 sshfs 询问。避免这种情况的解决方法是:

  1. 将选项添加-o StrictHostKeyChecking=no到 sshfs 或
  2. 手动运行一次 sshfs 将主机添加到已知的主机文件中

相关内容