Google Colabは、基本的にJupyter Notebookから使用します。
しかし、ngrokというサービスを使用することで、sshで接続する方法が知られています。
How can I ssh to google colaboratory VM? - Stack Overflow
上記サイトの方法では、sshでログインする際にパスワードが必要になりますが、鍵ペアを使用してログインしたかったため、試したところ接続することができましたので、方法を載せておきます。
なお、鍵ペアでアクセスしたい理由は、Google Colabで将棋AIのUSIエンジンを実行したかったためです。
将棋所からバッチファイル経由でssh接続する場合、パスワードを入力することができないため、パスワードなしでログインする必要があります。
sshコマンドは、引数からパスワードを渡すことができませんが、鍵ペアを使用するとパスワードなしでログインすることができます。
ngrok経由でsshdを起動
上記のサイトの方法に、鍵ペアでのログインを許可する設定を加えて、sshdを起動します。
加えたのは、
! echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
の行です。
この時点では、まだクライアントの鍵の設定は行っていません。
#Generate root password import random, string password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(20)) #Download ngrok ! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip ! unzip -qq -n ngrok-stable-linux-amd64.zip #Setup sshd ! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null #Set root password ! echo root:$password | chpasswd ! mkdir -p /var/run/sshd ! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config ! echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config ! echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config ! echo "LD_LIBRARY_PATH=/usr/lib64-nvidia" >> /root/.bashrc ! echo "export LD_LIBRARY_PATH" >> /root/.bashrc #Run sshd get_ipython().system_raw('/usr/sbin/sshd -D &') #Ask token print("Copy authtoken from https://dashboard.ngrok.com/auth") import getpass authtoken = getpass.getpass() #Create tunnel get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 22 &') #Print root password print("Root password: {}".format(password)) #Get public address ! curl -s http://localhost:4040/api/tunnels | python3 -c \ "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
実行すると、
Copy authtoken from https://dashboard.ngrok.com/auth
というリンクが表示されるので、リンク先にアクセスしてトークンをクリップボードにコピーして、入力欄に入力します。
初回アクセス時はngrokのサインインが必要です。
成功すると、以下のようにrootのパスワードと、URLが表示されます。パスワードとポートは毎回異なります。
Root password: mwbVRS9XnegtI3AVp3n7 tcp://0.tcp.ngrok.io:12451
クライアントで鍵ペア作成
sshで接続するクライアントで、鍵ペアを作成します。(作成済みの場合は、実行不要です。)
Windows 10 バージョン 1803 以降では OpenSSH クライアントがデフォルトでインストールされています。
ssh-keygen -t rsa
パスフレーズを聞かれますが、そのままEnterで問題ありません。
C:\Users\username\.ssh\に、
公開鍵のアップロード
Google Colabのファイルブラウザ(左ペインからファイルを選択)から、アップロードをクリックして、作成したid_rsa.pubをアップロードします。
フォルダを変更していなければ、/content/にアップロードされます。
パスワードを使用してssh接続して、公開鍵を認証済みに設定する
クライアントから、パスワードを使用してssh接続します。
ssh root@0.tcp.ngrok.io -p 12451
-pオプションで指定するポートは、sshdを起動した際に表示されたポート番号です。
パスワードを聞かれますので、sshdを起動した際に表示されたパスワードを入力します。
rootのホームディレクトリに.sshというディレクトリを作成し、アップロードしたid_rsa.pubを/root/.ssh/authorized_keysに移動します。
mkdir /root/.ssh mv /content/id_rsa.pub /root/.ssh/authorized_keys
これで、鍵ペアを使用してログインできるようになります。
一度sshをログアウトして、再度ログインする際には、パスワードを聞かれません。