2017-01-28 5 views
1

を働いていないkeygenの私はstackoverflowの上の他の場所にこのコードを見つけました:のSSH既知ホストのキーが、-Fは

  1. これを:私は、コードを使用しています二つの問題を持っている

    if [ -z "`ssh-keygen -F ${wPCS_IP}`" ]; then 
        ssh-keyscan -p ${wPCS_PT} -H ${wPCS_IP} >> ~/.ssh/known_hosts 
    fi 
    

    コードは成功してもエラー($?= 1)を生成しています。

  2. known_hostsが追加された後でssh-keygen -F $ {wPCS_IP}を再度実行すると、known_hostsの鍵が見つかったばかりです。これは大きな問題です。

ローカルマシンはUbuntu Server 16.04 LTSで、リモートマシンはUbuntu Server 14.04 LTSです。

私のコードと私が見つけたコードサンプルの主な違いは、私がポートオプション-pを使用していることです。

また、known_hostsファイルに名前やIPアドレスでマシンがリストされていないことに気付きました。これは私のGentooノートパソコンとは異なります。

+0

'known_hosts'ファイルがどこにあるかを' ssh-keygen'に伝えてみてください。より良いアプローチは 'もし! ssh-keygen -F $ {wPCS_IP} -f〜/ .ssh /既知のホスト>/dev/null 2>&1;次に、ssh-keyscan -p $ {wPCS_PT} $ {wPCS-IP} >>〜/ .ssh/known_hostsを入力します。 fi'。 – alvits

+0

返事をありがとう。私はあなたのコマンドをそのまま使用し、同じ結果を生み出しました。これはknown_hostsに必要な行を追加しますが、再度実行するとknown_hostsファイルのホストは検出されず、再度生成されます。 – Raydude

+0

Ubuntu 16.04サーバでは、known_hostsファイルにリモートマシンのポート番号が表示されます。私はポートが何らかの形でssh-keygen -Fが動作するように指定する必要があるのだろうか? – Raydude

答えて

1

だから、SSHの代替ポートがあるとき、それはこの形式のIPアドレスの一部としてknown_hostsファイルに格納されていることが判明した:

[${WPCS_IP}]:WPCS_PT 

仕事にif文のためにということを意味し、どの、それはこのように見える必要があります:私は正しい方向に進んで取得するためのalvitsへ

if ! ssh-keygen -F "[${wPCS_IP}]:${WPCS_PT}" -f ~/.ssh/known_hosts > /dev/null 2>&1; then ssh-keyscan -p ${wPCS_PT} ${wPCS-IP} >> ~/.ssh/known_hosts; fi 

おかげで...

更新:それはUbuntuの16.04 encrypが判明しますリモートホストのIPアドレスです(ポートではありません)。私はまだこの違いに適応する方法を理解しようとしています。

別のアップデート:-Hオプションが失敗していることが判明しました。キーをハッシュしたら、それはもう見つけられません。これは、Ubuntuの14.04で動作します:

if ! ssh-keygen -F ${IP_ADDR} -f ~/.ssh/known_hosts > /dev/null 2>&1; then ssh-keyscan -p ${PORT} ${IP_ADDR} >> ~/.ssh/known_hosts; fi 
# IP_ADDR SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.1 
# IP_ADDR SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.1 
if ! ssh-keygen -F ${IP_ADDR} -f ~/.ssh/known_hosts > /dev/null 2>&1; then ssh-keyscan -p ${PORT} ${IP_ADDR} >> ~/.ssh/known_hosts; fi 

あなたは文がキースキャンデータを生成し、キースキャンデータが正確であるため、2番目にはない、しかし、あなたは-Hを追加した場合、keygenのは検出されない場合は、最初のことを見ることができますハッシュ化されたキーのエントリ...しかし

、Ubuntuの16.04で動作するようなコマンドを取得するには、変更する必要がある場合:

if ! ssh-keygen -F [${IP_ADDR}]:${PORT} -f ~/.ssh/known_hosts > /dev/null 2>&1; then ssh-keyscan -p ${PORT} ${IP_ADDR} >> ~/.ssh/known_hosts; fi 
# IP_ADDR:PORT SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 
# IP_ADDR:PORT SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 
# IP_ADDR:PORT SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 
if ! ssh-keygen -F [${IP_ADDR}]:${PORT} -f ~/.ssh/known_hosts > /dev/null 2>&1; then ssh-keyscan -p ${PORT} ${IP_ADDR} >> ~/.ssh/known_hosts; fi 

この場合、known_hostsファイルにはポートを含める必要があります。.. 。

-Hもここにあります。 ifは、-Hで生成されたキーを見つけられません。

動作がバージョンによって異なり、最も安全なバージョンのハッシュが機能しないことは苛烈です。

もう1つの編集:リモートサーバがsshd_configの非標準ポートを使用する場合、known_hostsにポートが指定されている可能性があります。これは予想される動作である可能性があります。

関連する問題