SSHセッション変数を介して

SSHセッション変数を介して

mount.cifs は、パスワード検証に PASSWD 変数を使用できます。

次の例は問題を示しています。

export PASSWD=mysecret; ssh foreignhost "echo $PASSWD"

有効です。つまり、環境変数 PASSWD の値が表示されます。素晴らしい、

export PASSWD=mysecret; ssh foreignhost "mount -t cifs //server/path /mnt -o username=myuser" 

パスワードを尋ねる

export PASSWD=mysecret; ssh foreignhost "PASSWD=$PASSWD mount -t cifs //server/path /mnt -o username=myuser"

パスワードは必要ありませんが、認証には PASSWD 値が使用されます。しかし、なぜ?セキュリティの問題は、パスワードがプロセスリストにプレーンテキストで表示されることです。

ベストアンサー1

export PASSWD=mysecret; ssh foreignhost "echo $PASSWD"

PASSWDこれは、ローカルシェル(およびローカルシェルによって開始された子プロセスの環境)でシェル変数を設定します。次にecho mysecretコマンドを実行しますforeignhost。ローカルシェルは二重引用符の間のテキスト"echo $PASSWD"に対して変数拡張を実行します。パスワード文字列はリモートシェルのコマンドラインに表示されるため、プロセスリストに表示されます。

export PASSWD=mysecret; ssh foreignhost "mount -t cifs //server/path /mnt -o username=myuser" 

PASSWDこれは、ローカルシェル(クライアントプロセスを含むローカルシェルによって開始された子プロセスの環境)にシェル変数を設定しますssh。クライアントとサーバーの構成によっては、SSHクライアントは特定の環境変数をサーバーに送信でき、サーバーはそれを受け入れたり受け入れたりしないことがあります。通常、ユーザー(またはディストリビューション)がSSHクライアントから送信するように設定されていない限り、許可された環境変数(ローカル変数LANGと特別な処理を受ける変数をLC_*含む)だけがSSHを介して渡されます。 SSHサーバーが許可し、リモートシェルに環境変数が設定されていません。TERMPASSWDPASSWDPASSWD

export PASSWD=mysecret; ssh foreignhost "PASSWD=$PASSWD mount -t cifs //server/path /mnt -o username=myuser"

最初の場合と同様に、リモートシェルコマンドにはパスワード(PASSWD=mysecret mount …)があるため、プロセスリストに表示されます。


多くのディストリビューションでは、名前が一致するすべての環境変数を送信および受け入れるように SSH を構成するため、LC_*独自の環境変数を定義してデータを渡すことができます。

LC_ENV_PASSWD=mysecret ssh foreignhost 'export PASSWD="$LC_ENV_PASSWD"; mount …'

パラメータの周囲に一重引用符がありますssh。このように、リモートホストで実行されるシェルコマンドはexport PASSWD="$LC_ENV_PASSWD"; mount …パスワードが含まれていません。

または、標準入力を介してパスワードを渡します。

echo mysecret | ssh foreignhost 'IFS= read -r PASSWD; export PASSWD; mount …'

おすすめ記事