SSHにアクセスせずにJenkinsノードでSSHキーを構成する





みなさんこんにちは! JenkinsをGitと連携するように設定したことがある人は誰でもNodeでキーを生成するのに問題があると思います。



もう一度、これをしなければならなかったとき、私は困難な状況にいることに気づきました-ジェンキンスとそのスレーブを持つサーバーへのsshアクセスがなかったため、キーを生成できませんでした。 しかし、それほど悪くはありませんでした。





シェルに到達する


Jenkinsの腸で騒ぎ立てて、ノードでGroovyコードを実行できるスクリプトコンソールが見つかりました。 これにより何が得られますか? 文字列に対する.execute()のおかげでシェルコマンドを実行する機能。 「but」は1つしかありません-スレッドリダイレクトや他のbashチャームは使用できないため、最初にbashインタープリターでコードを実行する方法を理解する必要があります。 このために、これらの簡単な行が考案されました(Groovyを初めて書いているので、コードを改善するためのヒントに感謝します)。



def file = new File(System.getenv("HOME") + "/testGroovyShell.sh") file << "#!/bin/bash\n\ echo hello, world!" def builder = new AntBuilder() builder.chmod(file:file.getAbsolutePath(), perm:'+x') println file.getAbsolutePath().execute().text file.delete()
      
      





これで、Jenkinsを実行しているユーザーに代わって任意のbashコードを実行できます!



SSHキー生成


しかし、それから残念なことに私を待っていました-ssh-keyを生成するために、彼が何かを尋ねるたびにEnterを押さなければなりませんでした。 控えめに言っても、これは私たちには適していないので、グーグルで馬鹿げているが、有効な解決策が見つかりました:



 #!/bin/bash echo -e "\n\n\n" | ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub
      
      





したがって、入力ストリームssh-keygenに改行を3回送信する必要があると言います。 これらのコマンドの実行後、スクリプトはサーバーの公開キーを表示します。 アカウントに追加して(たとえば、GitHubで)、Jobを実行し、...再び中断するだけです。



GitHubの例を使用して、サーバーをknown_hostsに追加します


私たちには鍵があるように思えますが、幸福のために他に何が必要ですか? あった! SSHは、未知のホストに初めてアクセスしたときに確認を求められるように設計されています。 今回は、コマンドを実行するだけで、ハッキングなしで実行します。



 ssh-keyscan -H github.com >> ~/.ssh/known_hosts
      
      





ここで、github.comは追加するホストです。



ホストを追加したら、タスクを実行して作業中のGitに満足することができます。



おわりに


記事の有用性がゼロになる傾向がある人には、あまりキックしないように頼みます。 これを行う方法に関する文書化されたプロセスは見つかりませんでしたが、質問は非常に重要です。



私は、マイナスのコメントの中ではなく、PMで見つかったバグと欠点について読むことを好みます;)



継続的インテグレーションの精神があなたと共に来ますように!



All Articles