私は以下を使用して小さなバックアップスクリプトを作成していますsshfs
。
sshfs backup_user@target_ip:/home /mnt/backup
このコマンドにパスワードを含める方法はありますか?
または、FTP / SFTP以外にログインパスワードを含めることができる別のファイル転送ソリューションはありますか?
私は以下を使用して小さなバックアップスクリプトを作成しています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鍵ペアを使用することです
一度サーバ上だけ不便はあなたが鍵生成プロセスを通過する必要があることだろうペアにする必要がありますが、バックアップするすべてのサーバーでパスワードをプレーンテキスト形式で保持するよりも適切です:)、
適切な方法でキーペアを生成する
ローカルサーバー上
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の「Protocol 2」のコメントを外します
sshdで公開キー認証を有効にする
/ etc / ssh / sshd_configの「PubkeyAuthentication yes」のコメントを解除します
/ etc / ssh / sshd_configでStrictModesがyesに設定されている場合、
restorecon -Rv ~/.ssh
マニュアルによれば-o password_stdin
、標準入力からパスワードを読み取れる可能性があるオプションがあり、これはおそらくリダイレクトになります。私はそれを使ったことがないので、推測しています。
そうは言っても、本質的に安全ではないこのようなソリューションには強くお勧めします。
ssh
秘密/公開鍵のシステムで非常にうまく機能します。シンプルで安全です。パスワードを入力したり、シェルスクリプトにクリアテキストで書き込む必要はありません。サーバーで公開鍵を押すだけで、すぐに接続できます。
printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
-o password_stdin
選択肢が見当たらないということです。
printf "my_password\n" | sshfs -o password_stdin user@hostname:/ $HOME/local_dir
PS Debian Buster PPSを使用していますこれは機能しますが、パスワードの入力を求められます:sshfs -o password_stdin user@hostname:/ $HOME/local_dir
パイピング"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つです。)
マウントスクリプト:
#!/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
覚えておくべきことの1つは、-o password_stdin
オプションを使用している場合、sshfsがホストに接続するかどうかを尋ねるので、機能していないように見えるかもしれないことです(初めて接続して追加されない場合)既知のホストファイルにまだ)。バッチで実行している場合、sshfsが要求することはありません。これを回避する回避策は次のとおりです。
-o StrictHostKeyChecking=no
sshfsにオプションを追加するか、