Google Colab が便利すぎるので、はまっています。Colab Proではブラウザにもターミナルがついているけど、やっぱりちょっと遅いので、ローカルのターミナルから使いたいですよね。ColabでSSH接続する方法まとめてみました。
2022/10/27 残念なお知らせ
Google Colabの規約でSSH接続が禁止されました😿
https://research.google.com/colaboratory/faq.html#limitations-and-restrictions
以下の手法でColabにSSH接続すると、規約違反になってしまいます。ご注意ください。ちなみに、有料版については、特に明言がありませんが、有料版を利用している場合でも、同様の警告がでましたので、たぶん規約違反になるのかと思われます。残念!
方法
- (1) cloudflared を使う方法
- (2) ngrok を使う方法
- (3) 別途契約のVPSのsshを介する方法
(1) cloudflared を使う方法
cloudflaredの機能を使う方法。Colabのコードセルに以下を記述して実行します。
# Cloudflareを使う場合
# Install colab_ssh on google colab
!pip install colab_ssh --upgrade
from colab_ssh import launch_ssh_cloudflared, init_git_cloudflared
launch_ssh_cloudflared(password="PASSWORD")
# Optional: if you want to clone a github repository
# init_git_cloudflared(githubRepositoryUrl)
macOSのローカルにHomebrewでcloudflaredをインストールします。以下のコマンドを実行します。
$ brew install cloudflare/cloudflare/cloudflared
そして、指示の通り、~/.ssh/config
に設定を追加して、macのターミナルにコマンドを入力します。指示が丁寧で割と簡単に接続できます。
(2) ngrok を使う方法
個人的にちょっと面倒だと感じたのと、下記に詳しい説明があるので譲ります。
- [https://qiita.com/hazigin/items/c291adf5dc9ccc13d11f](Google Colab をSSH と VS Code で使う)
(3) 別途VPSのsshを介する方法
サクラやConohaなど、その辺の格安VPSをsshポートフォワーディングで介すれば、かなり気軽に接続できます。月々500円ちょっとで契約できるので、Colab ProとVPS足してもお小遣いレベルで使えます。
最初に、OpenSSH Serverをインストールします。コードセルで以下を実行します。SSHサーバーをインストールして実行します。
! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null
! 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
get_ipython().system_raw('/usr/sbin/sshd -D &')
次いで、ColabのSSHサーバーを、VPSのSSHにポート転送します。ポート番号は何でも良いのですが、ここでは8888番にしてみます。Colab Proのターミナルで以下を実行します。
! ssh -R 8888:localhost:22 vpsuser@vpsdomain.com
そして、PCのターミナルから以下のコマンドを実行します。
$ ssh root@vpsdomain -p8888
ただし、この場合、VSPの以下の設定を変更する必要があります。
- VPSのファイアウォールで8888番も解放しておくこと
- VPSの /etc/ssh/sshd_config の設定を変更する
echo "GatewayPorts yes" >> /etc/ssh/sshd_config
詳しい設定は以下のサイトが役に立ちます。
(結論) 格安VPS + Colabの組み合わせが最強
VPSで重たい処理やると、すぐに制限がかかってしまうので、重たい処理はColabでやって、VPSにSCPやGitでデータバックアップという流れが良い感じです。
上記のコードセルでやっている処理を、シェルスクリプトにしてGoogleドライブに保存しておけば、Googleドライブをマウントして、コマンド一発でSSHの接続設定が整うようにできます。
VPSにGitリポジトリを作成して、Colabの作業の最初にGitをcloneするようにして、作業終了後にcommit & pushして閉じるようにすれば、かなり良い流れで作業できます。というのも、GoogleドライブにGitリポジトリを配置すると、もの凄く重いので。あくまでもGoogleドライブはzip圧縮してデータ保存するのが中心です。
この流れにすれば、Colabで毎回作業ストレージが初期化されるのもメリットとなり、OSS開発など不特定多数の環境で使ってもらう場合に、まっさらな環境で毎回依存チェックできるので非常に便利です。