當您想要在本地或者其它設備上,使用終端或VSCode遠程連接DSW實例時,可以采用SSH直連的方式,其連接穩定并且快速。
使用限制
直連方式支持的DSW實例類型。
使用公共資源組創建的后付費DSW實例。
使用靈駿智算資源創建的DSW實例。
公網NAT網關支持DSW實例數量限制。
由于VPC的公網NAT網關的限制,當使用公網登錄方式遠程連接DSW實例時,PAI會為您的每個公網NAT網關配置最多100條DNAT規則,您無需手動配置。因此,一個公網NAT網關最多同時支持100個DSW實例。更多有關配額的詳情,請參見配額。
準備工作
當使用公共資源組創建后付費DSW實例時,需要完成以下準備工作:
當使用靈駿智算資源創建DSW實例時,需要創建靈駿智算資源。具體操作,請參見靈駿智算資源配額。
如果需要通過公網登錄方式(即從本地命令行或其他客戶端)遠程連接DSW實例,您需要為專有網絡創建公網NAT網關并綁定EIP。具體操作,請參見創建公網NAT網關、綁定EIP。
開通內網DNS解析(PrivateZone),具體操作,請參見開通內網DNS解析。
步驟一:獲取SSH公鑰
首先需要在客戶端上生成公鑰,在生成過程中需要設置用于登錄DSW實例的密碼,如果您想要使用remote_ikernel工具連接實例(見本文場景示例),請不要設置密碼,直接按回車鍵(Enter)。生成公鑰的命令如下:
(推薦)將公鑰生成到默認路徑下:
ssh-keygen -m PEM -t rsa -b 4096
執行該命令后,默認在以下目錄中生成4096位RSA類型的公鑰(
id_rsa.pub
)和私鑰(id_rsa
)文件。如果當前位置已存在SSH密鑰對,則這些文件將被覆蓋。不同系統默認路徑如下:Windows操作系統:保存在
C:\Users\<username>\.ssh
目錄或C:\用戶\<username>\.ssh
目錄。Linux操作系統:root用戶保存在
/root/.ssh
目錄;普通用戶保存在/home/<username>/.ssh
目錄。Mac操作系統:保存在
/Users/<username>/.ssh
目錄。
將公鑰生成到自定義目錄下:
ssh-keygen -m PEM -t rsa -b 4096 -f /your/path/example_rsa # 將在/your/path下生成example_rsa.pub和example_rsa
步驟二:開啟DSW實例的直連功能
在創建DSW實例時,對如下網絡相關參數進行配置,其他參數配置詳情,請參見創建DSW實例。對于已創建的實例,單擊變更配置修改對應參數,然后單擊確定,更新配置。
公共資源組后付費實例配置
參數 | 描述 | |
網絡配置 | 專有網絡 | 選擇已創建的專有網絡、交換機和安全組。 |
安全組 | ||
交換機 | ||
公網訪問網關 | 請根據您的使用場景進行選擇:
| |
SSH配置 說明 打開網絡配置后可見。 | SSH公鑰 | 打開SSH配置開關,將步驟一中生成的公鑰文件 說明 如果您需要同時支持VPC內登錄和公網登錄方式,您需要同時添加多個客戶端的公鑰。請按照回車換行的方式逐個添加公鑰,最多支持添加10個公鑰。 |
登錄方式 |
|
靈駿資源組實例配置
參數 | 描述 | |
SSH配置 | SSH公鑰 | 打開SSH配置開關,將步驟一中生成的公鑰文件 說明 如果您需要同時支持VPC內登錄和公網登錄方式,您需要同時添加多個客戶端的公鑰。請按照回車換行的方式逐個添加公鑰,最多支持添加10個公鑰。 |
登錄方式 |
|
步驟三:安裝SSH Server
如果您的DSW實例使用的是官方預置鏡像或基于官方預置鏡像生成的自定義鏡像,則已默認安裝了SSH Server,您可以跳過該步驟。否則需要按照以下步驟來手動安裝SSH Server。
打開需要操作的DSW實例。
在DSW的Terminal中,執行如下命令。
sudo apt-get update sudo apt-get install openssh-server sudo service ssh start
如果執行命令失敗,返回結果為sudo,表示未找到命令,您可以嘗試執行
apt-get install sudo
命令后,再次執行上述命令即可。執行如下命令可以查看SSH Server狀態。
service ssh status
步驟四:遠程連接DSW實例
查看訪問方式。
在DSW頁面,單擊實例名稱進入實例詳情頁面。在實例配置頁簽的訪問配置區域中,查看公網訪問方式和VPC訪問方式。
說明如果SSH配置未選擇公網登錄,則此處將只顯示VPC訪問方式,不顯示公網訪問方式。
連接DSW實例。
通過SSH連接
公網訪問
在本地命令行或其他終端中,使用步驟1查詢的公網訪問方式遠程連接到DSW實例。
ssh root@xx.xx.xx.xx -p 1024 # 如果私鑰不在默認路徑上,需要指定私鑰的位置 ssh -i /your/path/example_rsa root@xx.xx.xx.xx -p 1024
VPC訪問
在VPC內的其他終端(例如ECS實例),使用步驟1查詢的VPC訪問方式遠程連接到DSW實例。
ssh root@dsw-notebook-xxxx.dsw-xxxx.dsw.pai.alibaba.com -p 22 # 如果私鑰不在默認路徑上,需要指定私鑰的位置 ssh -i /your/path/example_rsa root@dsw-notebook-xxxx.dsw-xxxx.dsw.pai.alibaba.com -p 22
通過本地VSCode連接
打開VSCode,在Extensions中安裝Remote - SSH插件。
單擊左下角,喚出Remote-SSH彈窗,選擇Connect to Host... > Add New SSH Host...。
輸入SSH連接命令。
ssh root@xx.xx.xx.xx -p 1024 # 如果私鑰不在默認路徑上,需要指定私鑰的位置 ssh -i /your/path/example_rsa root@xx.xx.xx.xx -p 1024
單擊右下角Connect,左下角顯示連接成功。
打開DSW實例中的目錄,開始遠程開發和調試。
運行時可連接DSW實例中的Kernel。
場景示例:在DSW實例上運行本地Notebook代碼
前提條件
已按照本文步驟一到步驟三完成SSH直連配置,且生成SSH公鑰時沒有設置密碼。
操作步驟
在本地Terminal安裝remote_ikernel工具,做初始化配置,并添加一個remote kernel。
pip install remote_ikernel
remote_ikernel manage --add \ --kernel_cmd="ipython kernel -f {connection_file}" \ # 無需修改 --name="Remote Python" \ --interface=ssh \ --host=root@*.*.*.*:1024 # 此處修改為您的host地址,如果私鑰不在默認路徑上,則需要設置為 --host="-i /your/path/example_rsa root@*.*.*.*:1024"
如果回顯提示如下,表示remote kernel添加成功。
Added kernel ['rik_ssh_root_121_40_*_*_1024_remotepython']: SSH root@121.40.*.*:1024 Remote Python.
查看remote kernel配置信息可執行如下命令。
remote_ikernel manage --show
在本地VSCode中,打開一個Notebook文件,右上角kernel切換,可在搜索框中選到Remote Python。
常見問題
是否支持使用PyCharm等本地WebIDE來遠程連接到DSW實例?
原則上支持所有基于原生SSH協議實現的功能。但需要注意的是,如果您使用PyCharm作為客戶端,則會在DSW實例中自動觸發下載和安裝服務端。因此,您需要確保您指定的DSW實例具有公網訪問能力。
VPC地址訪問不通,如何解決?
請確認您是否使用了自定義鏡像,您的自定義鏡像里是否安裝并開啟了SSH服務。詳情請參見步驟三:安裝SSH Server。
請確認您創建實例的安全組規則內,入方向是否允許TCP 22端口的訪問。
如果上述方法無法解決您的問題,請聯系您的商務經理進行進一步排查。
如何查看實例公網IP?
如果您已配置好公網NAT網關,可以通過以下步驟查看公網ip。
在DSW實例列表頁,單擊實例名稱進入實例配置頁面。
找到網絡信息的區域,單擊彈性公網IP,即可在彈性公網實例頁面查看到IP。
公網地址訪問不通,如何解決?
請先在VPC環境內,確認您的VPC地址是否可以訪問DSW實例。
如果VPC地址可以訪問,但公網地址無法訪問。請確認在您選擇的VPC中是否創建了多個公網NAT網關:
如果創建了多個公網NAT網關,請參考同VPC內多公網NAT網關部署方案,檢查您的NAT網關、vSwitch和路由表之間的關系是否正確。您在DSW中選擇的vSwitch能夠在路由表中正確路由到您選擇的NAT網關,這樣才能使您的SSH請求的返回結果返回到您的客戶端。
如果您只有一個公網NAT網關,請使用自助問題排查中的網絡連通性問題進行排查。輸入您本機的公網IP、您的公網EIP以及DSW實例分配給您的端口(即在DSW實例詳情頁查詢的公網訪問方式中配置的端口),分析網絡可達性。
相關文檔
DSW也支持使用ProxyClient客戶端代理工具遠程連接DSW實例。具體操作,請參見ProxyClient方式。