SSHキーを作成する
今回、認証方式はRSAを採用する。
ssh-keygen -t rsa
SSHキーの保管場所を指定したい場合は、指定する。
Enter file in which to save the key (/c/Users/future/.ssh/id_rsa):
厳重の暗号化したいなら、パスフレーズを設定する。面倒なら何も入力せずEnter2回で飛ばす。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
SSHキーの保管場所が表示されるのでメモしておく。(大体ユーザのカレントディレクトリ)
Gitlabに公開鍵を登録
自分のユーザアイコン>Prefernces>SSH Keys
の順で画面遷移。(ちょいちょいページの場所変わってるっぽいので頑張って探して)
Add new key
を押下。
Key
に先ほど作成したSSHキーの公開鍵(.pub)の方の中身を貼り付ける。
Add key
を押下して登録完了。
SSH接続準備
ssh-agentに秘密鍵を登録
Windowsユーザは手動でssh-agentに秘密鍵を登録しないといけないらしいので登録する。
ssh-add -l
などを入力して、以下のメッセージが出た場合、ssh-agentが起動していないので先ずはssh-agentを起動する。
Could not open a connection to your authentication agent.
ssh-agentを起動。
eval `ssh-agent`
ssh-agentに秘密鍵を登録する。パスはSSHキー生成時にメモしたもの。
ssh-add /c/Users/[Windowsのユーザ名]/.ssh/id_rsa
configファイルを生成
公開鍵と秘密鍵が格納されているフォルダ
にホスト名、秘密鍵パス等を設定するconfig
という名前(拡張子なし)のファイルを作成する。
中身を以下のように編集する。IdentityFile
は秘密鍵のパス。
Host gitlab
HostName gitlab.com
User git
IdentityFile /c/Users/[Windowsのユーザ名]/.ssh/id_rsa
SSH接続テスト
以下コマンドを入力。初回はいろいろ表示されるが、yes
を入力していけばOK。
ssh -T git@gitlab
最終的に以下のメッセージが出ていたら接続成功。
Welcome to GitLab, [gitlabのユーザ名]!
これでリモートからクローンしたり、プッシュしたりできるようになっているはず。
git clone
git clone git@gitlab.com:[グループ]/[プロジェクト].git
git push
git remote add origin git@gitlab.com:[グループ]/[プロジェクト].git
git puth origin main
※リモートの指定にはhttps://...
ではなく、git@...
の方のURLを使用する。
おまけ
Gitにリモート接続する際にデフォルト以外のフォルダに格納してある鍵を使用する方法
基本的にSSHキーはカレントディレクトリの.ssh
フォルダに保存していく。
(Linux系だと/home/[Linuxのユーザ名]/.ssh
、Windowsだと/c/Users/[Windowsのユーザ名]/.ssh
)
なので、gitコマンドもデフォルトは上記パスの.ssh
フォルダ内から鍵のパスを設定するconfigファイルや鍵を探す。
しかし、諸々の都合上どうしてもデフォルト以外のフォルダに格納してある鍵を使用したいこともあるので以下にメモしておく。
環境変数GIT_SSH_COMMAND
を使用する
環境
- OS: Amazon Linux 2
- Gitバージョン: 2.9.5
home/[Linuxのユーザ名]/gitlab/.ssh
に格納してある秘密鍵を使用したい。
ユーザのホームディレクトリで以下コマンドを叩く。
export GIT_SSH_COMMAND="ssh -i $(pwd)/gitlab/.ssh/id_rsa -F /dev/null -o StrictHostKeyChecking=no"
-
-i
: 相対パスでも指定出来るが、サブモジュールの取り込み等する際に参照できなくなるため絶対パス推奨。pwdコマンドで現在位置までのパスを出力させると楽。 -
-F
: /dev/nullはconfigファイルを指定しないの意味。 -
-o StrictHostKeyChecking=no
: 初回のSSH接続の際に対話モードで確認されるやつを飛ばす。
ちなみにgit config core.sshcommand
で設定するという方法もあるそうだが、今回の環境ではうまくいかなかった。