SSHを使用してログインできるリモートサーバーがあります。しかし、私のユーザーにはホームディレクトリはありません。
ssh -X
サーバーに接続しようとすると、sshはCookieをサーバーに入れようとしますが、~/.Xauthority
明らかに失敗するため、X出力はできません。
私が知っている限り、クッキーを保存するために別のファイルを指定する方法はありません。
だから一時家で手動で設定してみました。
mkdir -p /tmp/myhome
cd /tmp/myhome
export HOME=$PWD
xauth add $DISPLAY . $COOKIE
xlogo # test setup
理論的には、sshはトンネルを正しく設定し、$ DISPLAYを設定する必要があります。欠けている唯一のものは$ COOKIEの正しい値です。
他のサーバーに表示される値xauth list
(類似ffb3c8b945442b70146f7158861f1a54
)は、このサーバーでは無効なようです。
質問:
- あるサーバーで動作するCookieが別のサーバーで動作しないのはなぜですか?
- 私の場合、有効なCookieをどのように取得できますか?
- この場合、xforwardingを設定するより簡単な方法はありますか? (正しいホームディレクトリを取得したり、暗号化されていない接続を使用することを除く
xhost
)
答え1
OpenSSHは、プロトコル側でX Cookieを設定する別の方法を提供します。sshrc
文書。このファイルは、~/.ssh/rc
または/etc/ssh/sshrc
(/etc/sshrc
またはサーバー構成によって異なる場所に)存在することがあります。このマニュアルでは、Cookieを手動で設定するためのこのファイルのコードスニペットを提供しています。サーバーが/bin/sh
POSIXより前のバージョンでない限り、このコードは次のように単純化できます。
if read proto cookie && [ -n "$DISPLAY" ]; then
echo "add unix:${DISPLAY#localhost:} $proto $cookie" | xauth -q -
fi
マニュアルでは、ホームディレクトリを設定するいくつかのコードの後にこのコードを置くことをお勧めします。あなたの場合は、HOME
環境変数を設定する必要があり、おそらく最初に一時ディレクトリを作成する必要があります。
コードは似ていますが、ディスプレイの先頭に残り、localhost:
サーバーがTCP接続を受信していない場合は機能しません。フォームの表示localhost:10
は同じではありませんが、両方が:10
機能している場合も同様の効果があります。ホスト名を持つフォームはTCPを介して接続されますが、ホスト名を持たないフォームはすべて利用可能なUnixソケットを使用します(TCPは最適化も可能ですが、接続がSSHを介してTCPを介して中継されたときにこれらの最適化が機能するかどうか疑問です。
他のユーザーがあなたが作成したプロセスをスヌーピングしているので、潜在的にコマンドラインをキャプチャするecho add … | xauth -
のではなく、好みます。組み込みシェルなので、フォームリカバリクッキーは使用できません。xauth add …
xauth
echo
echo add …