獲得雲主機帳戶和密碼后,須進行一些配置,提升安全性和使用便捷性:
-
提升安全性 防止暴力破解密碼:
- 關閉 root 帳戶遠程登陸(防暴力破解密碼)
- 添加新帳戶(降低帳戶風險)
- 開啟密鑰登陸(基於密鑰文件驗證登陸)
- 添加二次驗證登陸(需要輸入密碼和驗證碼才能登陸)2FA/MFA
-
增強易用性
- 配置本地
ssh config文件簡化本地登錄命令 - 新建帳戶
sudo時無需輸入密碼
- 配置本地
1 提升安全性
1.1 新建帳戶并添加sudo权限
通常拿到的是 root 帳戶,但 root 帳戶有兩個問題:
- 權限太大,誤操作容易讓系統崩潰,如刪除系統文件
- 帳戶名眾所周知,只需破解密碼即可遠程登陸,風險較高
為確保安全,需新建一帳戶作為主要帳戶:
- 該帳戶有
sudo權限,而且可以 ssh 登陸 - 同時禁止 root 帳戶 ssh 登陸
新帳戶執行其它權限操作時候需要添加sudo和輸入密碼,會在一定程度上減小誤操作。關閉 root 帳戶 ssh 登陸之後,若要獲得系統權限,須同時破解帳戶名和密碼,安全性大大提升。
禁用 root 帳戶登陸之前,必須確保新建帳戶能夠 ssh 登陸。否則禁用 root 帳戶 ssh 登陸之後就無法用 ssh 登陸機器了。
1.1.1 添加新用戶
sudo useradd userA # add a new account
sudo passwd userA # set password for userA
其中passwd命令也可修改其它已知帳戶密碼。
1.1.2 添加sudo權限
userA 需要添加sudo權限才能進行sudo dnf upgrade等操作。有兩種方式:
sudo vim /etc/sudoers
sudo visudo
两种方式本质都是修改/etc/sudoers文件,在文件最後添加一行:
userA ALL = ALL : ALL
這裡添加到配置文件最后一行添加,原因是/etc/sudoers配置文件后面项目会覆盖前面項目。
1.1.3 測試新帳戶登陸和sudo權限
此時 userA 可以遠程登陸,且可以sudo操作。此时进行测试:
先不要關閉 root 帳戶的登陸,客戶端新開終端,用 userA 帳戶登陸并执行sudo操作(如sudo cat /etc/sudoers),查看是否成功。
如果失敗,则登陆 root 账户重新操作。后面还有其它操作,需要 root 账户保底,暂时先不要關閉 root 账户 ssh 登陸。
1.2 配置密鑰驗證登陸
1.2.1 密鑰登陸原理
登陸遠程服務器有多種驗證方式,可參考redhat 給出的說明。除密碼驗證之外,另一種常見方式是密鑰驗證。登陸過程中服務器會驗證客戶端上密鑰(一個文件),驗證通過則登陸。
要通過偽造密鑰的方式來偽造登陸,通常是不可能的。通常使用的 rsa 加密算法,密碼長度有 1024 位,幾乎不可能破解。
1.2.2 密鑰登陸操作
使用密鑰登陸,通常需要三步:
-
客戶端生成密鑰
客户端运行
ssh-keygenssh-keygen -t rsa這個過程中提示輸入密碼,可以輸入密碼,也可以直接回車(就是無密碼)。運行完成後在客戶端的
~/.ssh/文件夾中生成id_rsa(私鑰)和id_rsa.pub(公鑰)兩個文件 -
上傳公鑰到服務器
將
id_rsa.pub上傳到服務器scp ~/.ssh/id_rsa.pub userA@cloud_linux_ip:~ -
服務器上配置密鑰
用 userA 帳戶登陸服務器,將公鑰配置到固定位置
mkdir ~/.ssh cat ~/id_rsa.pub ~/.ssh/authorized_keys rm ~/id_rsa.pub # 刪除公鑰
通常情況下,密鑰登陸就實現了。私有密鑰id_rsa一定不能洩漏,否則其他人可以使用私鑰登陸。
1.2.3 密鑰登陸失敗 debug
如果上面操作後,依舊不能密鑰登陸,可以客戶端上如下操作獲得詳細 log:
ssh -vvv usrA@cloud_linux_ip
常見解決方式:
-
配置
/etc/ssh/sshd_config,允許密鑰登陸:RSAAuthentication yes PubkeyAuthentication yes -
修改服務器上
.ssh文件夾和authorized_keys文件的權限:sudo chmod 744 ~/.ssh sudo chmod 600 ~/.ssh/authorized_keys
1.3 二次驗證登陸
在沒有密鑰的客戶端上,若確實有登陸服務器的需求,應該用密碼驗證。此時可添加二次驗證,登陸時不僅要輸入密碼,而且要輸入驗證碼。
二次驗證碼來自手機 app,可以使用Microsoft Authenticator或者 Google Authenticator。
可參考redhat 的說明在服務器上配置二次登陸。在/etc/ssh/sshd_config中配置AuthenticationMethods的方式需要特別說明一下。假定配置如下:
AuthenticationMethods MethodA MethodB,MethodC MetchodD MetchodE,MethodF
- 这里用空格作为分隔;
- 如果驗證方式
MethodA通過,則停止驗證,登陸成功; - 如果
MetchodA不通過,則會驗證MethodB和MethodC,只有同時通過才能登陸; - 如果上面不通過,則會驗證
MethodD; - 以此類推,如果到
MetchodF都沒有通過,則會驗證失敗;
如果一種驗證方式沒有在/etc/ssh/sshd_config中被允許,強行使用這種方式來驗證只會失敗。一般服務器支持的驗證方式,可以查看redhat 給出的說明。本機配置如下:
AuthenticationMethods publickey keyboard-interactive
keyboard-interactive包含兩個過程,先輸入密碼,然後輸入驗證碼。這個方式和password是不同的方式,服務器最終實現效果:
-
客戶端有私鑰,快速登陸
-
客戶端沒有私鑰,需要先輸入帳戶密碼,再輸入驗證碼登陸

1.4 關閉 root 远程登陸
关闭 root 远程登陆之前,一定要保证有其他有用sudo權限的账户可以远程登陆。
修改/etc/ssh/sshd_config关闭 root 账户登陆:
PermitRootLogin no
確保可以密鑰登陸後,可同時关闭密码登陆:
PasswordAuthentication no
若由於其它原因無法關閉 root 帳戶登陸,一定要給 root 帳戶設定複雜密碼,可以openssl生成隨機密碼,提升安全性:
openssl rand -base64 32 #生成一個長度為32的密碼
2 易用性配置
2.1 去掉sudo密碼
通常并不以 root 身份登录,但有些操作又要用到 root 权限,則在命令前添加sudo來實現,後面需要輸入密碼。每次輸入密碼,會比較麻煩。可以修改/etc/sudoers的配置,去掉輸入密碼的過程。
可以按組或用戶配置,可以讓所有命令或者部分命令免密碼。
-
用戶 userA 帶
sudo運行所有命令無密碼:userA ALL=NOPASSWD: ALL -
用戶 userA 帶
sudo運行部分命令無密碼:userA ALL=/usr/bin/ls: ALL -
某組用戶
groupA帶sudo運行所有命令無密碼:%groupA ALL=NOPASSWD: ALL
可能配置後並不生效。此時查看當前配置是否被覆蓋,如配置文件後面內容覆蓋了前面的內容,組帳戶配置覆蓋了個人帳戶配置。將當前用戶的設定移動到配置文件最後面,退出後再登陸。
2.2 客戶端配置 config 別名
在客戶端上登陸,需要輸入ssh userA@cloud_linux_ip等各種參數,十分繁瑣,通過修改客戶端~/.ssh/config來減少登陸時輸入信息:
Host name
HostName server_ip
User userA
ForwardAgent yes
ServerAliveInterval 20
ServerAliveCountMax 999
Port 22
運行ssh name就可以直接登陸了。
3. 一些实惠云服务
- oracle cloud 真免费,可以选择的地方有东京或者美国。
- google cloud 300 刀的免费体验
- ms azure 免费体验
- cloudflare
總結
本文介紹了獲取雲計算主機後的相關操作,主要目的在於提升安全性和操作的便捷性。實現了服務器上帳戶的添加,密碼修改,登陸方式的修改等。