ssh-copy-idを元に戻す方法は?


15

2ノードのhadoopクラスターがあります。

マスターでこのコマンドを実行しました:

$ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@192.168.1.1

これを元に戻すにはどうすればよいですか?実際にキーを再割り当てしたいと思います。

192.168.1.1 スレーブです。

回答:


20

実行時にコピーした公開キーを特定しますssh-copy-id

cat ~/.ssh/id_rsa.pub

キーをコピーしたサーバーへのSSH:

ssh hadoop@192.168.1.1

任意のエディターを使用してファイル~hadoop/.ssh/authorized_keys192.168.1.1編集し、キーを含む行を削除します。


1
それをもっと自動で行う方法はありますか?のようなssh-rm-id hadoop@192.168.1.1
SR

@SRこれを自動化する単一のコマンドを認識していません。理論的にはsshsedコマンド(または同様のコマンド)を実行~/.ssh/authorized_keysして行を編集および削除する小さなワンライナーを使用して、自分で「自動化」できます。superuser.com/questions/429954/…を
David Edwards

4

あなたがssh-copy-id好きなことをした場合:

remote='user@machine'
ssh-copy-id -i $remote

したがって、パスワードを使用せずにこのリモートマシンにアクセスできます。

ssh $remote

体系的な方法で元に戻すには、次のようなスクリプトを作成できます。

idssh=`cat ~/.ssh/id_rsa.pub | awk '{print $2}'`
ssh $remote "sed -i '/$idssh/{d}' .ssh/authorized_keys"

scp複数のファイルが必要なスクリプトで使用しているため、パスワードを要求するのは1回だけです。


1
これは少し危険かもしれません。あなたはキーのコメントフィールドを模索しています。意味のない任意の文字列であり、複数回含めることができます。長いAAA....==文字列(実際のキー)またはからの完全な行のいずれかをgrepしますid_rsa.pub。しかし、キーの削除を自動化する方法を示すために+1。
PerlDuck

1
@PerlDuckあなたは正しいです。3番目のフィールドよりもキー($ 2)自体を使用する方がはるかに優れています。ありがとうございました。
ハビM.

@Javi M.別の問題が発生しました。デフォルトでsedの区切り文字として使用されるスラッシュは、公開鍵に含まれていました。その結果、セミコロンをsed区切り文字として使用するのが最善であることがわかりました。これは、公開キーには表示されそうにないためです。これを行うには、まずキャラクターをエスケープする必要がありました。:私はこのようなものになってしまったssh $remote "sed -i '\;$idssh;{d}' .ssh/authorized_keys"
ccalvert

どの文字が公開鍵になるかについての情報を次に示します。
ccalvert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.