[TECH]GitHub接続時の ~/.ssh/configの書き方 🔥
はじめに
本記事ではタイトルの内容に加えて ~/.ssh/config
に対する基本的な理解を深めるため、各種設定項目に関する説明も付随して行います.githubを例に挙げてはいるものの、비트통や GitLab、Gitサーバへ接続する際にも利用可能な ~/.ssh/config
の設定について記載しております.
~/.ssh/configの書き方
まず githubへ接続する ~/.ssh/config
の設定を見ていきます.githubで認証に使用する 야유キーは登録済みで秘密鍵は ~/.ssh/github
へ配置している想定です.
야유キーが未登録の場合は 公式サイトの手順 に従って鍵の生成・登録までを行っておきます.
Host github.com
IdentityFile ~/.ssh/github
User git
~/.ssh/config
の各種設定項目は下記になります.
| 項目 | 説明 |
| ---- | ---- |
| 진행자 |ホスト名を指定する |
| 파일 식별 |接続時に使用する秘密鍵を指定する |
| 사용자 |接続時のユーザ名を指定する |
設定を行うことで github.com
に 야유接続する際、ユーザ名に git
が指定され、 ~/.ssh/github
に存在する秘密鍵を用いて 야유接続を試みるようになります.
早速 github.com
接続時に正しく認証が通っているか確認するため、適当なプライベートリポジトリを git clone
してみます.
プライベートリポジトリを git clone
した実行結果 (成功)
無事に git clone
できることが確認できたら成功です.
接続先に応じて秘密鍵を使い分けたい
githubで常に同一の秘密鍵を用いて認証を行う際は問題ないのですが、例えば githubアカウントをプライベート用と仕事用で使い分けていて、リポジトリ先に応じて秘密鍵を使い分けたいというケースはあると思います.
その場合は ~/.ssh/config
の設定と git
のリモートリポジトリへの接続情報を変更することで対応可能です.
例えばプライベート用の githubアカウント A
と仕事用の githubアカウント B
が存在するとします.その際 github-A
がホストの時は A
の秘密鍵を、 github-B
がホストの時は B
の秘密鍵を利用するための設定は下記になります.
# プライベート用の GitHub アカウントで利用する接続設定
Host github-A
HostName github.com
IdentityFile ~/.ssh/github-A
User git
# 仕事用の GitHub アカウントで利用する接続設定
Host github-B
HostName github.com
IdentityFile ~/.ssh/github-B
User git
新たに HostName
という項目を設定しました. HostName
には接続先を指定します. HostName
は何も指定しない場合 Host
と同じ値が設定されます.
今回は同一接続先に対してアカウントを切り替えたいので、 Host
にはアカウント識別可能な値 (예: github-A
, github-B
등)を、 HostName
に接続先である github.com
を明示的に指定してアカウント毎に設定をわけました.
次に git
のリモートリポジトリへの接続情報を変更します.~/.ssh/config
に User
を指定している場合は該当 Host
へ接続時に自動的にユーザが設定されるため、接続 통합 리소스 포지셔닝 주소からユーザ名である git
は取り除いても問題ありません.
# 現在のリモートリポジトリ URL
git remote -v
origin [email protected]:nikaera/private-repository.git (fetch)
origin [email protected]:nikaera/private-repository.git (push)
# リモートリポジトリ URL を
# [email protected]:nikaera/private-repository.git から
# github-A:nikaera/private-repository.git に変更する
# (ユーザ名の git は変更先から取り除いている)
git remote set-url origin github-A:nikaera/private-repository.git
# 新たに設定したリモートリポジトリ URL
git remote -v
origin github-A:nikaera/private-repository.git (fetch)
origin github-A:nikaera/private-repository.git (push)
この状態で先ほど git clone
してきたプライベートリポジトリ内で git ls-remote origin
コマンドを実行してみて正常に結果が取得できれば正しく設定できています.
A
の接続設定で git ls-remote origin
の実行に成功する
次に B
のアカウント情報で接続を試みます.
# 現在のリモートリポジトリ URL
git remote -v
origin github-A:nikaera/private-repository.git (fetch)
origin github-A:nikaera/private-repository.git (push)
# リモートリポジトリ URL を github-A:nikaera/private-repository.git から
# github-B:nikaera/private-repository.git に変更する
git remote set-url origin github-B:nikaera/private-repository.git
# 新たに設定したリモートリポジトリ URL
git remote -v
origin github-B:nikaera/private-repository.git (fetch)
origin github-B:nikaera/private-repository.git (push)
B
には先ほどのプライベートリポジトリの読み取り権限が無い状態で、 git ls-remote origin
コマンドを実行してみると失敗するはずです.
B
の接続設定で git ls-remote origin
の実行に失敗する
これで今後は git
のリモートリポジトリ 통합 리소스 포지셔닝 주소を一度書き換えておくだけで、それぞれ適切な秘密鍵で github認証する設定ができました.
単に 지트サーバに 야유接続する際の設定情報としては、上記項目を抑えておけば問題無いです.しかし、他にも設定したほうが良い項目や、場合によっては設定が必要な項目も存在します.
基本的に設定しておいた方が良い項目
他に設定しておいたほうが良い項目には下記があります.
Host github.com
IdentityFile ~/.ssh/github
User git
IdentitiesOnly yes # IdentityFile で指定した秘密鍵でのみ認証を試みる
Compression yes # Git でのファイル転送時に圧縮する
項目
説明
型
유일하다IdentityFile
で指定した鍵ファイルでのみ認証を行うかどうか指定する
부울 값yes
또는 no
압축
圧縮転送を行うかどうか指定する
부울 값yes
또는 no
IdentityFile
で指定したファイル以外で認証が通ってしまう状況だと、意図したアカウントで適切に認証が通せていない可能性が出てきてしまいます.
そのため、特別な理由がなければ IdentitiesOnly
には yes
を設定しておいたほうが良いです.IdentitiesOnly
を no
に設定しておくと ssh-add
で登録したキーの中からも認証を試みるようになります.
また、 Compression
についても yes
に設定しておくことをオススメします.プログラミングを行っているプロジェクトでは、テキストファイルの数が大半を占めるはずなので、圧縮転送を有効にしておいたほうがファイル転送の速度向上を見込めるからです.
ただし Compression
は大容量の単一のファイルがアップされているなどして、圧縮効率の悪いファイルを含んでいるプロジェクトの場合は逆に転送速度が低下する恐れもあるので要注意です.
接続先によっては設定が必要な項目
接続先に応じて設定する必要がありそうな項目には下記があります.
Host github.com
IdentityFile ~/.ssh/github
User git
Port 12345 # 接続先のポートが 22 以外の場合指定する
項目
説明
型
항구.
야유接続時のポート番号を設定する
번호(예: 22, 22222 등)
例えば自前で用意した 지트リポジトリに対して接続する場合、야유のポートがセキュリティ上の理由等でウェルノウンポートの 22
ではない場合がありえます.その場合は Port
を明示的に指定することで接続時のポート番号を適切な値に設定しておく必要が出てくるでしょう.
おわりに
今回は githubへ 야유接続する際の例を元に ~/.ssh/config
の設定方法について書きました. ~/.ssh/config
で Host
の設定は行っているものの、それに応じて git
のリモートリポジトリ 통합 리소스 포지셔닝 주소を変更すべき場合もあることを明示している記事が少なかったので書きました.
また、本記事では 지트接続時の ~/.ssh/config
の設定にフォーカスを当てましたが、 ~/.ssh/config
についてはサーバに 야유接続して作業する際に設定しておくと良い項目等もあります.~/.ssh/config
の各種設定項目について理解していると頻繁に実行するコマンドのコスト削減ができて便利です.特に こちらの記事 はとても参考になりました.
参考リンク
まず githubへ接続する
~/.ssh/config
の設定を見ていきます.githubで認証に使用する 야유キーは登録済みで秘密鍵は ~/.ssh/github
へ配置している想定です.야유キーが未登録の場合は 公式サイトの手順 に従って鍵の生成・登録までを行っておきます.
Host github.com
IdentityFile ~/.ssh/github
User git
~/.ssh/config
の各種設定項目は下記になります.| 項目 | 説明 |
| ---- | ---- |
| 진행자 |ホスト名を指定する |
| 파일 식별 |接続時に使用する秘密鍵を指定する |
| 사용자 |接続時のユーザ名を指定する |
設定を行うことで
github.com
に 야유接続する際、ユーザ名に git
が指定され、 ~/.ssh/github
に存在する秘密鍵を用いて 야유接続を試みるようになります.早速
github.com
接続時に正しく認証が通っているか確認するため、適当なプライベートリポジトリを git clone
してみます.プライベートリポジトリを
git clone
した実行結果 (成功)無事に
git clone
できることが確認できたら成功です.接続先に応じて秘密鍵を使い分けたい
githubで常に同一の秘密鍵を用いて認証を行う際は問題ないのですが、例えば githubアカウントをプライベート用と仕事用で使い分けていて、リポジトリ先に応じて秘密鍵を使い分けたいというケースはあると思います.
その場合は
~/.ssh/config
の設定と git
のリモートリポジトリへの接続情報を変更することで対応可能です.例えばプライベート用の githubアカウント
A
と仕事用の githubアカウント B
が存在するとします.その際 github-A
がホストの時は A
の秘密鍵を、 github-B
がホストの時は B
の秘密鍵を利用するための設定は下記になります.# プライベート用の GitHub アカウントで利用する接続設定
Host github-A
HostName github.com
IdentityFile ~/.ssh/github-A
User git
# 仕事用の GitHub アカウントで利用する接続設定
Host github-B
HostName github.com
IdentityFile ~/.ssh/github-B
User git
新たに HostName
という項目を設定しました. HostName
には接続先を指定します. HostName
は何も指定しない場合 Host
と同じ値が設定されます.今回は同一接続先に対してアカウントを切り替えたいので、
Host
にはアカウント識別可能な値 (예: github-A
, github-B
등)を、 HostName
に接続先である github.com
を明示的に指定してアカウント毎に設定をわけました.次に
git
のリモートリポジトリへの接続情報を変更します.~/.ssh/config
に User
を指定している場合は該当 Host
へ接続時に自動的にユーザが設定されるため、接続 통합 리소스 포지셔닝 주소からユーザ名である git
は取り除いても問題ありません.# 現在のリモートリポジトリ URL
git remote -v
origin [email protected]:nikaera/private-repository.git (fetch)
origin [email protected]:nikaera/private-repository.git (push)
# リモートリポジトリ URL を
# [email protected]:nikaera/private-repository.git から
# github-A:nikaera/private-repository.git に変更する
# (ユーザ名の git は変更先から取り除いている)
git remote set-url origin github-A:nikaera/private-repository.git
# 新たに設定したリモートリポジトリ URL
git remote -v
origin github-A:nikaera/private-repository.git (fetch)
origin github-A:nikaera/private-repository.git (push)
この状態で先ほど git clone
してきたプライベートリポジトリ内で git ls-remote origin
コマンドを実行してみて正常に結果が取得できれば正しく設定できています.A
の接続設定で git ls-remote origin
の実行に成功する次に
B
のアカウント情報で接続を試みます.# 現在のリモートリポジトリ URL
git remote -v
origin github-A:nikaera/private-repository.git (fetch)
origin github-A:nikaera/private-repository.git (push)
# リモートリポジトリ URL を github-A:nikaera/private-repository.git から
# github-B:nikaera/private-repository.git に変更する
git remote set-url origin github-B:nikaera/private-repository.git
# 新たに設定したリモートリポジトリ URL
git remote -v
origin github-B:nikaera/private-repository.git (fetch)
origin github-B:nikaera/private-repository.git (push)
B
には先ほどのプライベートリポジトリの読み取り権限が無い状態で、 git ls-remote origin
コマンドを実行してみると失敗するはずです.B
の接続設定で git ls-remote origin
の実行に失敗するこれで今後は
git
のリモートリポジトリ 통합 리소스 포지셔닝 주소を一度書き換えておくだけで、それぞれ適切な秘密鍵で github認証する設定ができました.単に 지트サーバに 야유接続する際の設定情報としては、上記項目を抑えておけば問題無いです.しかし、他にも設定したほうが良い項目や、場合によっては設定が必要な項目も存在します.
基本的に設定しておいた方が良い項目
他に設定しておいたほうが良い項目には下記があります.
Host github.com
IdentityFile ~/.ssh/github
User git
IdentitiesOnly yes # IdentityFile で指定した秘密鍵でのみ認証を試みる
Compression yes # Git でのファイル転送時に圧縮する
項目説明
型
유일하다
IdentityFile
で指定した鍵ファイルでのみ認証を行うかどうか指定する부울 값
yes
또는 no
압축圧縮転送を行うかどうか指定する
부울 값
yes
또는 no
IdentityFile
で指定したファイル以外で認証が通ってしまう状況だと、意図したアカウントで適切に認証が通せていない可能性が出てきてしまいます.そのため、特別な理由がなければ
IdentitiesOnly
には yes
を設定しておいたほうが良いです.IdentitiesOnly
を no
に設定しておくと ssh-add
で登録したキーの中からも認証を試みるようになります.また、
Compression
についても yes
に設定しておくことをオススメします.プログラミングを行っているプロジェクトでは、テキストファイルの数が大半を占めるはずなので、圧縮転送を有効にしておいたほうがファイル転送の速度向上を見込めるからです.ただし
Compression
は大容量の単一のファイルがアップされているなどして、圧縮効率の悪いファイルを含んでいるプロジェクトの場合は逆に転送速度が低下する恐れもあるので要注意です.接続先によっては設定が必要な項目
接続先に応じて設定する必要がありそうな項目には下記があります.
Host github.com
IdentityFile ~/.ssh/github
User git
Port 12345 # 接続先のポートが 22 以外の場合指定する
項目説明
型
항구.
야유接続時のポート番号を設定する
번호(예: 22, 22222 등)
例えば自前で用意した 지트リポジトリに対して接続する場合、야유のポートがセキュリティ上の理由等でウェルノウンポートの
22
ではない場合がありえます.その場合は Port
を明示的に指定することで接続時のポート番号を適切な値に設定しておく必要が出てくるでしょう.おわりに
今回は githubへ 야유接続する際の例を元に ~/.ssh/config
の設定方法について書きました. ~/.ssh/config
で Host
の設定は行っているものの、それに応じて git
のリモートリポジトリ 통합 리소스 포지셔닝 주소を変更すべき場合もあることを明示している記事が少なかったので書きました.
また、本記事では 지트接続時の ~/.ssh/config
の設定にフォーカスを当てましたが、 ~/.ssh/config
についてはサーバに 야유接続して作業する際に設定しておくと良い項目等もあります.~/.ssh/config
の各種設定項目について理解していると頻繁に実行するコマンドのコスト削減ができて便利です.特に こちらの記事 はとても参考になりました.
参考リンク
Reference
이 문제에 관하여([TECH]GitHub接続時の ~/.ssh/configの書き方 🔥), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nikaera/tech-github-ssh-config-4cck텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)