ファイアウォールの背後にマシンがあります。 sshを介して転送されるポートを使用してVPNトンネリングを使用してリモートで接続します。マシンに接続するには、VPNの外部IPと、個人用および一時的に割り当てられたポートを使用します。私が使用するコマンドは次のとおりです。
ssh USER@VPN_IP -p PORT
VPN_IP
とPORT
は頻繁に変更されるため、ホストキーをknown_Host
に保存して中間者攻撃を排除する利点は得られませんが、同時にホストキーは私にはよく知られており、現在のVPN_IP
とPORT
の組み合わせに使用するためにsshに提供できます。それは可能ですか?どうやって?
known_hosts
ファイルはこれらのキーを提供するためのものであり、直接のコマンドラインの代替手段はありません(とにかく、それほど便利ではありません)。ただし、known_hosts
ファイルを使用すると、目標を完全に達成できます。
man sshd
の- ssh_known_hosts
ファイル形式 を読み通します。
ホスト認証を実行するとき、一致する行に適切なキーがある場合、認証が受け入れられます。完全に一致するもの、またはサーバーが認証用の証明書を提示した場合は、証明書に署名した認証局のキー。
~/.ssh/known_hosts
(および/etc/ssh/ssh_known_hosts
)でワイルドカードを使用することができます。
これらのファイルの各行には、マーカー(オプション)、ホスト名、キータイプ、base64でエンコードされたキー、コメントのフィールドが含まれています。フィールドはスペースで区切られます。
ホスト名はパターンのコンマ区切りリストです(
*
および?
はワイルドカードとして機能します)。次に、各パターンは、正規のホスト名(クライアントを認証する場合)またはユーザー指定の名前(サーバーを認証する場合)と照合されます。パターンの前に!
を付けて、否定を示すこともできます。ホスト名が否定されたパターンと一致する場合、その行の別のパターンと一致しても、(その行では)受け入れられません。ホスト名またはアドレスは、オプションで[
および]
括弧で囲み、その後に「:」と非標準のポート番号を続けることができます。
信頼できるキーを作成することが可能です
わかっている場合は、ネットワーク範囲。 TEST-NET-2
の場合:
198.51.100.* ssh-rsa AAAAB3Nza...2iQ==
カンマ区切りのリストを使用した複数の範囲(例:すべてのTEST-NET
s):
192.0.2.*,198.51.100.*,203.0.113.* ssh-rsa AAAAB3Nza...2iQ==
またはどこにでも接続する場合:
* ssh-rsa AAAAB3Nza...2iQ==
このキーが存在しない場合でも、yes
と答えると、他のキーの信頼性について警告し、指紋を表示して自動的に追加します。比較は行ごとに行われます。
Esa Jokinenの有用な答えを使用し、ここでプロセスを自動化する私の解決策:
#!/bin/sh
previous_IP_OR_known_Host_key_line=$1
current_IP=$2
user=$3
port=$4
#random extension to avoid collision by multiple script execution
temp_file="/tmp/temp_Host_file.$(hexdump -n 2 -e '/2 "%u"' /dev/urandom)"
if [ "$(echo "$previous_IP_OR_known_Host_key_line"|wc -w)" -gt 1 ]; then
echo "$previous_IP_OR_known_Host_key_line"|sed "s/^[^ ]*/$current_IP/">"$temp_file"
else
ssh-keygen -F "$previous_IP_OR_known_Host_key_line"|grep -v "^#"|sed "s/^[^ ]*/$current_IP/">"$temp_file"
fi
ssh "$user"@"$current_IP" -p "$port" -o UserKnownHostsFile="$temp_file"
rm "$temp_file"
スクリプトは、sshに提供する一時的なknown_Hostファイルを生成します。スクリプトには、次のパラメーターが必要です(順序に従う)。
-マシンが以前に受け入れた接続で持っていた宛先IP OR known_Hostファイルからのキーを持つ対応するRAW行。
-現在のIP(VPN /ファイアウォールの背後)。
-ユーザー。
-ポート。