社内の Gitサーバや、社内の Linuxサーバ、GitHub に SSH で接続するときなど、ユーザ名とパスワードを入力しなければならないと思います。もちろん、必要に応じて、パスワードは必要だと思いますが、ローカルな Gitサーバに接続するのに、そんなに厳密に運用する必要はない場合もありますよね。
特に、Git の場合、push するたびに、ユーザ名とパスワードを入力するのは、とても面倒です。
ということで、今回は、ユーザ名とパスワードを入力しなくてもいい方法を書きます。いつも忘れてしまって、Web をウロウロしてしまうので(笑)。
一応、ここに書くことは、セキュリティ的に問題ない場合に限って使える方法なので、そこはご注意頂ければと思います。
それでは、やっていきます。
はじめに
いろんなケースがあると思いますので、1つずつ、分けて書いていこうと思います。
環境は、Linux(Ubuntu、ParrotOS)を使っています。
公開鍵と秘密鍵を準備する
現状、よく使われている認証方式は、パスワードによる認証と、公開鍵と秘密鍵を使った方法だと思います。
パスワードを使った認証で、パスワードを入力しない方法は、何らかのツールを使わないと難しいです。
公開鍵と秘密鍵を使った認証方式とは、秘密鍵は自分だけが持って置き、公開鍵を接続先のサーバに置いておきます。すると、秘密鍵を持った自分だけが、認証をパスできるという仕組みです。
ここでは、公開鍵と秘密鍵を使って、パスワードを入力しないでいい方法を説明します。
では、公開鍵と秘密鍵の作成方法です。いろんな方法があると思いますし、鍵長もたくさん種類がありますが、ここでは、最も簡単に作れる方法にしています。
まず、ホームディレクトリ直下に、.ssh ディレクトリが存在する場合、そこに、id_rsa(秘密鍵)と id_rsa.pub(公開鍵)というファイルが無いことを確認してください。公開鍵と秘密鍵がこれらのファイル名で作られるので、上書きしてしまうためです。
もちろん、別の場所に、別のファイル名で作成することもできますが、その場合(秘密鍵を ~/.ssh/id_rsa というパス以外に配置する場合)は、.ssh ディレクトリに configファイルを用意して、秘密鍵の場所を示す必要があります。これは、環境ごとに configファイルを用意することになり、この記事の趣旨に合わないので、その説明は他のサイトを見て頂ければと思います。ここでは、configファイル無しで、パスワード入力せずに接続できる方法を書きます。
では、作成方法です。1コマンドでコマンドライン引数も不要です。パスワードと、パスワードの確認と、なぜかもう1回パスワードについて、合計3回聞かれますが、すべて Enterキーを押してパスワードを無しで作成します。
ここでパスワードを設定すると、秘密鍵を使うたびに、パスワードを聞かれてしまいます。
ssh-agent を使えば、最初の1回だけパスワードを聞かれて、それ以降は聞かれなくなりますが、そもそも ssh-agent を起動して、秘密鍵を登録するのにコマンド入力が必要で、それが面倒です。
.bashrc などに、ssh-agent を起動するようにしておけば、起動の手間は省けますが、そうすると、ログインに少し時間がかかるようになりますし、毎回秘密鍵を使うわけでもないのに、ログイン時に秘密鍵のパスワードを入力するのは面倒です。
パスワードを入力しなくていい環境にするのは、なかなか難しいです。
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsaYour public key has been saved in /home/user/.ssh/id_rsa.pubThe key fingerprint is:SHA256:EztWOA879kcyRIw+CIICXCDT9ujnuW9KZBBLTSsjkoI user@parrotThe key's randomart image is:+---[RSA 3072]----+|*+=+. o. ||==+oo. .o. ||E.=+.. o= o ||o..+. . oX || . o S.+ . || .o. o = + || o.. . . || .o . . || o=. |+----[SHA256]-----+$ ll ~/.sshtotal 16Kdrwx------ 1 user user 84 Aug 24 21:22 ./drwxr-xr-x 1 user user 1.8K Aug 24 21:15 ../-rw------- 1 user user 2.6K Aug 24 20:56 id_rsa-rw-r--r-- 1 user user 565 Aug 24 20:56 id_rsa.pub-rw------- 1 user user 1.5K Aug 24 20:59 known_hosts-rw------- 1 user user 648 Aug 24 20:59 known_hosts.old
公開鍵と秘密鍵が、RSA-SHA2 で作成されました。SHA-1 は数年前に非推奨になったので、現在はデフォルトで、SHA-2 が使われるようです。
この .ssh ディレクトリは、パーミッションが 700 であることが必要です。また、秘密鍵(id_rsa)は、パーミッションが 600 であることが必要です。一応、ここで確認しておいた方がいいです。
では、この 2ファイル(id_rsa と id_rsa.pub)を使いまわしていきます。
GitHubにパスワードを入力せずにpushとかpullする方法
GitHub に先ほど作った公開鍵を登録します。こうすることでパスワードを求められなくなります。
GitHubに公開鍵を登録する方法
GitHub の自分のリポジトリにアクセスします。右上にアイコンがあるので、そこをクリックして、Settings をクリックします。
以下の画面になると思うので、SSH and GPG keys というところをクリックします。
次は、以下の画面になるので、右側の New SSH key をクリックします。
Title は任意の名前を設定できるので、今回登録する公開鍵が識別できるような名前が望ましいと思います。Key-type は Authentication Key のままで大丈夫です。Key のところには、先ほど作成した公開鍵を cat とかで出力して、全てをコピーして貼り付けます。ここまで入力できたら、Add SSH Key をクリックします。
以下のように、You have successfully added the key 'no-password'. と出ていれば成功です。
公開鍵が有効になっているかをチェック
登録した公開鍵が有効に働いているかを確認します。秘密鍵を配置してる Linux で以下を入力します。
$ ssh -T git@github.com $ ssh -T git@github.com Hi dk0893! You've successfully authenticated, but GitHub does not provide shell access.
このようなメッセージが出れば、ちゃんと公開鍵と秘密鍵の認証は出来ています。
ローカルリポジトリのリモート接続先を確認する
この時点で、push、pull でパスワードが聞かれない状態になっていれば、この項目は必要ありません。もし、ユーザ名とパスワードが聞かれる状態なら、以下を進めてください。
秘密鍵を配置している Linux に、この GitHub のローカルなリポジトリがあると思います。無い場合はクローンしてから確認してください。
Git には、HTTPS接続か、SSH接続があります。HTTPS接続になっていると、公開鍵認証ではなく、パスワード認証が有効になる場合がありますので、ここで確認します。
以下のようになっていたら、HTTP接続です。
$ git remote -v origin https://github.com/dk0893/experiment.git (fetch) origin https://github.com/dk0893/experiment.git (push)
以下のようになっていたら、SSH接続です。
$ git remote -v origin git@github.com:dk0893/experiment.git (fetch) origin git@github.com:dk0893/experiment.git (push)
もし、HTTPS接続になっていたら、以下のようにして、SSH接続に変更して、再度設定を確認してください。
$ git remote set-url origin git@github.com:dk0893/experiment.git $ git remote -v origin git@github.com:dk0893/experiment.git (fetch) origin git@github.com:dk0893/experiment.git (push)
これで、パスワードを一切入力せずに、GitHub に push、pull 出来るようになったと思います。
Gitサーバにパスワードを入力せずにpushとかpullする方法
Git の push、pull というタイトルとなってますが、これは結局、SSHログインをパスワードを入力せずに出来るようにすることを意味します。
基本的には、GitHub と同じことをします。秘密鍵を .ssh ディレクトリに配置した PC から、公開鍵を Gitサーバに登録します。
簡単な方法は、ssh-copy-id コマンドを使います。-i の後に、公開鍵のパスを指定します。その後ろは、ssh で接続するときと同じで、ユーザ名@接続先ホストのIPアドレス(名前でアクセスできるならホスト名)です。このときは、まだ公開鍵を登録する前なので、パスワードを聞かれます。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub wasbook@192.168.56.101 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed --if you are prompted now it is to install the new keys wasbook@192.168.56.101's password:Number of key(s) added: 1Now try logging into the machine, with: "ssh 'wasbook@192.168.56.101'"and check to make sure that only the key(s) you wanted were added.
成功すると、ssh接続でパスワードが聞かれなくなりますし、Gitサーバに push、pull するときもパスワードが聞かれなくなります。
もし、うまくいかない場合は、上の Git のアクセス方法が SSH接続になっていることを確認してるところを読んでください。
WindowsからLinuxにGit BASHでSSH接続するときにパスワードを入力しない方法
手順は Linux と全く同じです。ssh-copy-id で公開鍵を SSHログインしたい Linux に登録して、秘密鍵(id_rsa)を .ssh ディレクトリに起きます。
$ ssh-copy-id -i /c/Users/XXX/.ssh/id_rsa.pub user@192.168.56.105 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/c/Users/dk089/.ssh/id_rsa.pub" The authenticity of host '192.168.56.105 (192.168.56.105)' can't be established.ED25519 key fingerprint is SHA256:immrVRNX/maG7juQuesI1+76Mdhtn3KFJ1QoeBhBlUs.This key is not known by any other names.Are you sure you want to continue connecting (yes/no/[fingerprint])? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysuser@192.168.56.105's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'user@192.168.56.105'" and check to make sure that only the key(s) you wanted were added.
では、ログインしてみます。
$ ssh user@192.168.56.105 Linux parrot 6.5.0-13parrot1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.13-1parrot1 (2023-12-19) x86_64 ____ _ ____ | _ \ __ _ _ __ _ __ ___ | |_ / ___| ___ ___ | |_) / _` | '__| '__/ _ \| __| \___ \ / _ \/ __| | __/ (_| | | | | | (_) | |_ ___) | __/ (__ |_| \__,_|_| |_| \___/ \__| |____/ \___|\___| The programs included with the Parrot GNU/Linux are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Parrot GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Aug 24 23:02:46 2024 from 192.168.56.1 : no key sequence terminator: user@parrot(972) ~ [1:0]$
問題なくログインできました。
WindowsからLinuxにTeraTermでSSH接続するときにパスワードを入力しない方法
RSA-SHA2 に TeraTerm が対応しているのは、v5.0(現在の最新版は v5.2)からなので、v5.0 以降のバージョンを使う場合は、同じ公開鍵、秘密鍵を使いまわすことが出来ます。
以下は、TeraTerm の公式サイトです。
「最新リリースは、GitHub よりダウンロードすることができます」のダウンロードをクリックします。
少し下にスクロールすると、teraterm-5.2.exe がダウンロードできます。過去のバージョン(v4)とは別にインストールされるので、共存が可能なようです。
では、公開鍵認証を試してみます。TeraTerm v5 を起動します。ホストアドレスを入力して、ポート番号などが正しいかを確認できたら、OKをクリックします。
次に、ユーザ名と秘密鍵を指定します。ユーザ名を入れないとエラーになるのでご注意ください。
無事にログインできました。
おわりに
今回は、Git を題材にしましたが、仕組みとしては、SSHログインでパスワードを使わない方法について書きました。
パスワードを入力しないことは、セキュリティとしては問題となるケースもあるので、堅実に対応するところと、手を抜くところを、うまく使い分けることが大事かな、と思います。
今回は、長年愛用させて頂いている TeraTerm のロゴを使わせて頂きました。ありがとうございます。
最後になりましたが、エンジニアグループのランキングに参加中です。
気楽にポチッとよろしくお願いいたします🙇
今回は以上です!
最後までお読みいただき、ありがとうございました。