我知道在GCP上,我们可以设置一个vscode服务器并连接到该服务器。但是我在这里想要了解的是,是否可以从本地运行的vscode连接到Google Colab上的运行时实例(免费的实例,即https://colab.research.google.com)。
如果我没记错的话,我们可以连接到vscode中的任何其他jupyter内核,而不必在本地创建新实例并连接到它。
因此,我想知道是否可以说首先创建一个Python 3笔记本,然后从您的本地计算机启动vscode,连接到colab运行时并在vscode中进行编码?
这里没有本地内容,所有文件,笔记本,所有内容都依赖于Google colab,仅是使用vscode而不是Google自己的编辑器进行编码和执行代码(调试等)。
答案 0 :(得分:9)
我刚刚发现了另一种不用ssh的方法。
# Install jupyterlab and ngrok
!pip install jupyterlab pyngrok -q
# Run jupyterlab in background
!nohup jupyter lab --ip=0.0.0.0 &
# Make jupyterlab accessible via ngrok
from pyngrok import ngrok
print(ngrok.connect(8888))
然后它将显示一个JupyterLab URL
http://f1fe6fb39df6.ngrok.io # for example
您可以单击它立即运行JupyterLab。或将URL与VSCode一起用于remote Jupyter kernel。
答案 1 :(得分:4)
为此colab-shh构建了一个python软件包。虽然,您必须手动从浏览器中打开colab并创建一个实例,因为colab还没有API可以执行此操作。
答案 2 :(得分:2)
我在第二次登录时遇到了同样的问题,我终于明白了。
./ ngrok文件没有执行权限会引发此问题。据我了解,当第一次下载ngrok并将其解压缩时,它获得了执行许可。这样您就可以创建一个隧道。但是,当重启Colab运行时时,我认为它会自动回收那些权限,因为当我尝试./ngrok authtoken $authtoken ....
时,它给了我权限被拒绝的错误。
因此,唯一要做的就是重新分配./ngrok执行权限,
例如,运行chmod 755 ./ngrok
。并且脚本将起作用。
答案 3 :(得分:1)
是的,这很有可能。今天才处理。
您需要做的是与google collab建立ssh连接。 将其写在google collab jupyter笔记本上:
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 "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'])"
检查您的ngrok状态以获取您的端口号(通过网站)
之后,您可以通过ssh连接到collab:
这是终端命令: $ ssh @ 0.tcp.ngrok.io -p (它会询问您上述片段生成的密码) 您现在应该可以连接。
但是,如果您想使用vscode, 通过远程SSH扩展与ssh重复连接
来源:
远程ssh:https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh 连接:Connect to google collab with ssh from console from PC
答案 4 :(得分:1)
如果退出会话,则无法重新连接,因为我相信它会更改端口。我也尝试过,然后抛出错误,说不可能。
但是,如果再次运行设置并转到https://dashboard.ngrok.com/status
,则会看到端口已更改。然后,您将可以将其用作新的远程连接。这样,我设法使其再次连接。
据我了解,会话终止后,Google不会保留您的文件。
答案 5 :(得分:1)
当前的 accepted answer 对我不起作用。对我有用的是在 google collab 中运行以下内容:
import random, string
password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(64))
# install pyngrok for opening a tunnel
!pip install pyngrok -q
#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 "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
from pyngrok import ngrok
ngrok.set_auth_token(authtoken)
print(ngrok.connect(22, "tcp"))
!whoami
print("Password: {}".format(password))
输出看起来像(只是重要的部分):
.
.
.
Copy authtoken from https://dashboard.ngrok.com/auth
··········
NgrokTunnel: "tcp://5.tcp.ngrok.io:12345" -> "localhost:22"
root
Password: <64-digit-password>
然后您可以执行 ssh root@5.tcp.ngrok.io -p 12345
并在系统询问时输入 <64-digit-password>
就可以了!