--- tags: Unix-like --- # SSH [TOC] Secure SHell,透過安全的連線登入遠端主機執行命令的一個應用層協定,port 默認為 22。 透過 RSA(非對稱密碼演算法)、DSA(非對稱密碼演算法)、Diff-Hellman(金鑰交換協定)來提升交換 key 以及資料加密的安全性。  * `-v` :Debug 模式。 ## Configuration ### `/etc/ssh/ssh_config` Client 端 每次要遠端連線時都要輸入 IP,但 IP 實在是很麻煩不好記,因此可以設定 config 來達到別名的功能。 ```shell $ vim ~/.ssh/config Host <alias_name> # 用來連線的 alias 名稱 HostName <host_domain_or_ip> # host domain 或 ip Port <port_number> # host 的 SSH port IdentityFile <~/.ssh/private_ssh_file> # 指定 key 路徑 User <username_on_remote_machine> # 登入 SSH 的 username,沒填就是目前使用者 ``` ## private key 如果 key 不是透過 `ssh-keygen` 產生,可能會遇到權限造成的 unprotected private key 問題。 ```shell -rw------- 1 celineyeh users 1856 Jan 2 17:38 id_rsa ✔︎ -rw-r--r-- 1 celineyeh users 1856 Jan 2 18:39 id_rsa2 ✗ ``` ```shell $ ssh target @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/home/celineyeh/.ssh/id_rsa2' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/celineyeh/.ssh/id_rsa2": bad permissions ``` 可以用 `scp` 傳檔案過去,避免改到權限,或是下 `chmod` 指令修改權限。 ```shell $ chmod 600 ~/.ssh/id_rsa2 ``` ### `/etc/ssh/sshd_config` Server 端 ## authorized_keys 將 public key 放到 server 的 `~/.ssh/authorized_keys` 裡,就可以改採用金鑰認證。 ## known_hosts 為了**安全機制**而生。在 client 第一次用連到 server 的時候,ssh 會列出 REMOTE_MACHINE 的 RSA key fingerprint,並且詢問是否要繼續連線。ssh 會把 server 的 public key(`/etc/ssh/ssh_host_rsa_key.pub`)存到 client 的 `~/.ssh/known_hosts` 裡,下一次再對同一台 server 連線時便不會再詢問是否要繼續連線。 但如果 server 的 key 更換過,server 傳過來的 public key 跟 client known_hosts 裡存的 key 不一樣,便會拒絕連線。 確定是安全的情況(例如 server 不是假冒的),可以用以下方法: * 刪除 known_hosts 內該 Server 的設定重新再連線一次。 * 透過指令刪除。 ```shell $ ssh-keygen -R <HOST NAME> ``` ## 參考資料 * [ssh / Linux man page](https://linux.die.net/man/1/ssh) * [ssh_config / Linux man page](https://linux.die.net/man/5/ssh_config)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up