web-dev-qa-db-ja.com

sshfsを使用したコマンドラインでのユーザー名とパスワード

sshfsを使用して小さなバックアップスクリプトを作成しています:

sshfs backup_user@target_ip:/home /mnt/backup

このコマンドにパスワードを含める方法はありますか?

または、FTP/SFTP以外にログインパスワードを含めることができる別のファイル転送ソリューションはありますか?

15
Zaza

-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
    
12
user209328

マニュアルによると、オプション-o password_stdinこれにより、標準入力からパスワードを読み取ることができる可能性があります。私はそれを使用したことがないので、私は推測しています。

とはいえ、本質的に安全ではないこのようなソリューションは強くお勧めしません。

sshは、秘密鍵/公開鍵のシステムで非常にうまく機能します。シンプルで安全です。パスワードを入力したり、シェルスクリプトで平文でパスワードを書き込んだりする必要はありません。サーバー上の公開鍵をプッシュするだけで、すぐに接続できます。

15
xhienne

パイピング'sshfs password'<<<から-o password_stdinはbashで動作します:

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'
12
Maz
echo 'password' | sshfs user@Host:/dir /mnt -o password_stdin

「-o password_stdin」オプションを使用すると、パスワードをパイプすることができます。

とはいえ、サービスプロバイダーがsftpで使用することを許可していない限り、キーはより良いオプションです。 (これはWPエンジンの注目すべき失敗の1つです。)

7
iateadonut

覚えておくべきことの1つは、-o password_stdinオプション。sshfsがホストに接続するかどうかを尋ねるので、機能していないように見える場合があります(初めて接続する場合で、既知のホストファイルにまだ追加されていない場合)。バッチで実行している場合、sshfsが要求することはありません。これを回避するための回避策は次のとおりです。

  1. -o StrictHostKeyChecking=no sshfsのオプションまたは
  2. sshfsを手動で1回実行して、ホストを既知のhostsファイルに追加します
2
frenchie71

マウントスクリプト:

#!/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
2
Michael

Sftpをsshfsに接続するための自動スクリプト

#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
0
champa