--- tags: Linux --- # SSH 連線 [![hackmd-github-sync-badge](https://hackmd.io/Ih0Nd3NzT6aCkACHfoG8uQ/badge)](https://hackmd.io/Ih0Nd3NzT6aCkACHfoG8uQ) ## Linux ### 1. 生成 RSA 密鑰 ```bash ssh-keygen -t rsa ``` ### 2. 複製密鑰到目標 server (免密碼登入) + #### 方法1 ```bash # 複製 id_rsa.pub 到目標 server 的 /home/user scp id_rsa.pub user@remote_server_IP:/home/user # 登入 SSH ssh user@remote_server_IP # 將密鑰複製到 /home/user/.ssh/authorized_keys cat /home/user/id_rsa.pub >> .ssh/authorized_keys ``` + #### 方法2 ```bash # 將以上三步驟合為一步驟 ssh-copy-id -i .ssh/id_rsa.pub user@remote_server_IP ``` ## Windows ### 1. 從 Windows SSH 連線到其他主機 + 跟上面的方法一樣 ### 2. 從其他主機 SSH 連線到 Windows 1. 要先安裝 OpenSSH 伺服器 > 開始 > 設定 > 應用程式 > 應用程式與功能 > 選用功能 > 查看是否已經安裝 OpenSSH 伺服器,沒安裝就到最上方有 > 新增功能,裡面搜尋 :::danger 若沒安裝 OpenSSH,在別台主機連線時 ```bash ssh user@remote_server_IP # ssh: connect to host <remote_server_IP> port 22: Connection refused ``` ::: 2. 以管理員身分,使用 PowerShell ```bash # 停止 ssh 伺服器 Stop-Service sshd # 啟動 ssh 伺服器 Start-Service sshd # ssh 服務自動啟動 Set-Service -Name sshd -StartupType 'Automatic' # 查看狀態 Get-NetFirewallRule -Name *ssh* ``` 會顯示以下訊息代表已經啟動 ```= Name : OpenSSH-Server-In-TCP DisplayName : OpenSSH SSH Server (sshd) Description : Inbound rule for OpenSSH SSH Server (sshd) DisplayGroup : OpenSSH Server Group : OpenSSH Server Enabled : True Profile : Any Platform : {} Direction : Inbound Action : Allow EdgeTraversalPolicy : Block LooseSourceMapping : False LocalOnlyMapping : False Owner : PrimaryStatus : OK Status : 已從存放區成功剖析規則。 (65536) EnforcementStatus : NotApplicable PolicyStoreSource : PersistentStore PolicyStoreSourceType : Local ``` 3. 可以開始使用```ssh user@remote_server_IP```連線 :::danger 若不知道 Windows user Name是什麼,可以使用 ```bash ssh-keygen # Generating public/private rsa key pair. # Enter file in which to save the key (C:\Users\Lenovo/.ssh/id_rsa): ``` ```Lenovo```就是我的 user Name ::: 4. 複製密鑰到目標 server (免密碼登入) :::danger 不可使用```ssh-copy-id -i .ssh/id_rsa.pub user@remote_server_IP```將密鑰放到 Windows 中,因為系統指令不同 ::: ```bash # 將密鑰傳送到 Windows 的桌面 scp ~/.ssh/id_rsa.pub user@remote_server_IP:"C:/Users/user/Desktop" # 登入 ssh user@remote_server_IP cd C:/Users/user/Desktop # 密鑰加入認證 type ./id_rsa.pub >> C:/Users/user/.ssh/authorized_keys ``` :::warning + 如果還是無法免密碼登入,就到```C:\ProgramData\ssh```編輯```sshd_config```檔案,把下面兩行註解起來 ``` # Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys ``` + 接著重新啟動 ssh 服務 ::: ### SSH 使用 ```bash # 到遠端執行 python ssh user@remote_server_IP python # 目前目錄下的 test.py 放入到遠端執行 ssh user@remote_server_IP python < test.py # 執行遠端 test.py 檔案 ssh user@remote_server_IP "python /home/user/Desktop/test.py" # 遠端執行並在遠端顯示窗口 ssh user@remote_server_IP "export DISPLAY=:0; python /home/user/Desktop/test.py" # 複製檔案到遠端桌面 scp ./test.py user@remote_server_IP:/home/user/Desktop # 複製 a.py, b.py 到遠端桌面 scp {a,b}.py user@remote_server_IP:/home/user/Desktop ```