sshfs
を使用して小さなバックアップスクリプトを作成しています:
sshfs backup_user@target_ip:/home /mnt/backup
このコマンドにパスワードを含める方法はありますか?
または、FTP/SFTP以外にログインパスワードを含めることができる別のファイル転送ソリューションはありますか?
-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キーペアを使用するのが最善の(安全でシンプルな)方法です
唯一の不便な点は、ペアリングする必要があるすべてのサーバーでキー生成プロセスを1回実行する必要があることですが、バックアップするすべてのサーバーでパスワードをプレーンテキスト形式で保持するよりも優れています。 )、
適切な方法でキーペアを生成する
ローカルサーバー上
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
マニュアルによると、オプション-o password_stdin
これにより、標準入力からパスワードを読み取ることができる可能性があります。私はそれを使用したことがないので、私は推測しています。
とはいえ、本質的に安全ではないこのようなソリューションは強くお勧めしません。
ssh
は、秘密鍵/公開鍵のシステムで非常にうまく機能します。シンプルで安全です。パスワードを入力したり、シェルスクリプトで平文でパスワードを書き込んだりする必要はありません。サーバー上の公開鍵をプッシュするだけで、すぐに接続できます。
パイピング'sshfs password'
と<<<
から-o password_stdin
はbashで動作します:
sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'
echo 'password' | sshfs user@Host:/dir /mnt -o password_stdin
「-o password_stdin」オプションを使用すると、パスワードをパイプすることができます。
とはいえ、サービスプロバイダーがsftpで使用することを許可していない限り、キーはより良いオプションです。 (これはWPエンジンの注目すべき失敗の1つです。)
覚えておくべきことの1つは、-o password_stdin
オプション。sshfsがホストに接続するかどうかを尋ねるので、機能していないように見える場合があります(初めて接続する場合で、既知のホストファイルにまだ追加されていない場合)。バッチで実行している場合、sshfsが要求することはありません。これを回避するための回避策は次のとおりです。
-o StrictHostKeyChecking=no
sshfsのオプションまたはマウントスクリプト:
#!/bin/bash
server=<Host>
user=<username>
pass=<password>
root=<hostpath>
mount=$(pwd)/sshfs
type sshfs >/dev/null 2>&1 || { echo >&2 "sshfs required"; exit 1; }
type sshpass >/dev/null 2>&1 || { echo >&2 "sshpass required"; exit 1; }
mkdir -p $mount
SSHPASS="$pass" sshfs $server:$root $mount -o ssh_command="sshpass -e ssh -l $user"
アンマウント:
#!/bin/bash
mount=$(pwd)/sshfs
fusermount -u $mount
Sftpをsshfsに接続するための自動スクリプト
#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END