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


15

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

sshfs backup_user@target_ip:/home /mnt/backup

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

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


4
ssh-gkeygenを使用してRSAキーペアを生成し、RSA認証を使用するようにssh(クライアントおよびサーバー)を構成できます。「通常の」ssh認証でこれをやったことがありますか?
エアハフ

はい。しかし、sshを介したサーバーの接続方法を変更する必要があります..認証がキーベースまたはログイン/パスワードの両方ではないことがわかっている限り、..
Zaza

2
両方の可能性があります。彼らは通常です。このようにして、新しく作成されたユーザーは、パスワードを入力してサーバー上のキーをプッシュできます。その後、キーを使用します。
xhienne

回答:


11

-o password_stdinfreeBSDなど、すべてのシステムで動作しているとは限りません。など

を使用することもでき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
    

14

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

そうは言っても、本質的に安全ではないこのようなソリューションには強くお勧めします。

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


誰でもこのソリューションの実用例を提供できますか?私は次のことを試みていますが、機能していません:printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
MikeyE

参考までに、パスワードで保護されたSSHキーを使用していることに言及する必要がありました。ここにある@ nathan-s-watson-haighが提供する回答を使用して動作させることができました:unix.stackexchange.com/questions/128974/…– MikeyE 18
13:07

パスワードで保護されたSSHキーを使用してssfs-mountをテストできる一致する環境が手元にありません。とにかく、あなたの命令で最初に私を襲ったのは、私には-o password_stdin選択肢が見当たらないということです。
xhienne

入力いただきありがとうございます。今、次のコマンドを試してみましたが、パスワードを要求しませんが、返されません。つまり、コマンドが完了するのを待っているだけで、コマンドプロンプトは表示されません。私はコマンドを試しました: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
MikeyE

11

パイピング"sshfs password"<<<-o password_stdinbashの上の作品:

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

4
これは受け入れられた答えであるはずです。LinuxOSで動作します。
アルゴン

だから、systemdで自動マウントするためにmnt-media.mountファイルにそれを置く方法は?
ジョアン・ホセ

非常に小さなコメント:パスワードに特殊なBASH文字(bang(!)など)が含まれている場合、パスワードには二重引用符ではなく一重引用符を使用する必要があります。
カイルチャリス

5
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin

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

ただし、サービスプロバイダーがsftpに使用することを許可しない限り、キーの方が優れたオプションです。(これはWPエンジンの顕著な障害の1つです。)


答えを明確にしてください。1行のコードのみがSEで良い回答としてカウントされません
ロミオニノフ

@RomeoNinovこの投稿は質問に十分に答えていると思います。誰もがなぜ自明なことが自明であるかを説明する小説を書く傾向があるわけではありません。
桂佐藤

@SatoKatsuraありがとう。しかし、私は挑戦します。
iateadonut

2

マウントスクリプト:

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

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

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

0

sftpでsftpを接続する自動スクリプト

#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.