ssh
私は最近ラップトップを購入し、ユーザーがGDMを介してログインしたときにリバーストンネルを設定するスクリプトを書いています。過去にノートパソコンを盗まれたことがあって、このようなことが再び起こる場合を備えたかったのでこうしました。
次のディレクトリにスクリプトを配置し、ユーザーがログインするたびにGDMがrootとして実行されます。
/etc/gdm/PostLogin/Default
スクリプト自体は次のとおりです。
if [[ "$(users)" = "user user" ]]; then
while (( "$(netstat -an | grep -E "\:22[ \t]+" | grep ESTABLISHED | \
wc -l)" < "1" ))
do
ssh -fvN -p 22 -R tunnelport:localhost:sshdport [email protected]
sleep 20
done
fi
ログインするとスクリプトが実行されますが、GDM でログインすると最初のif
文が失敗します。そのステートメントを削除すると、コマンドはif
中断されます。ssh
私ができることについてのアイデアはありますか?
答え1
このスクリプトを有効にして冗長にした後に出力をファイルに書き込むと、問題の原因を簡単に確認できます。
詳細を増やすには、if
最初のドアの前にこれを追加してください。
set -x
スクリプトがすべてをファイルに書き込むようにするには、このSO Q&Aタイトルに記載されている方法を使用できます。すべてのbashスクリプト操作を完全に記録するには?。以下は、その投稿からほとんど抜粋したものです。
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':
説明する:
exec 3>&1 4>&2
リダイレクト前の状態に復元できるようにファイル記述子を保存するか、次のリダイレクト前の状態に独自の出力を使用します。
trap 'exec 2>&4 1>&3' 0 1 2 3
特定のシグナルのファイル記述子を復元します。サブシェルの終了時に復元する必要があるため、通常は必要ありません。
exec 1>log.out 2>&1
stdoutをlog.outファイルにリダイレクトし、stderrをstdoutにリダイレクトします。同じファイルに入るには、順序が重要です。 stderrをstdoutにリダイレクトする前に、stdoutを最初にリダイレクトする必要があります。