最一開始學習Linux時學的是CentOS發行版,也就習慣了用了許多年,安裝Linux第一個想到的就是CentOS。但後來CentOS開始一些不友善的行為,例如CentOS 7升8換掉一大半指令。這就算了,結果8代維持沒多久就說到2021年底將不再支援CentOS 8了,真是…不知道要說什麼。得知消息後改用Ubuntu,玩了一陣子也蠻喜歡的,但不管是Google Cloud Platform,還是Microsoft Azure,Linux的VM預設的Image都是Debian。看別人評價也是Debian比起Ubuntu更適合當Server,因此這次從Debian開始重新安裝,順便紀錄我習慣使用的方式。
目前我是自己安裝VM的話使用使用Ubuntu,使用Google Cloud Platform等雲端平台安裝的話使用Debian,本文中講述的東西是兩邊都通用的,我在Debian 11 Bullseye、Ubuntu 20.04與Ubuntu 22.04都用過。
基本設置
更新APT套件
sudo apt update && sudo apt upgrade -y
指定時區
之前在Microsoft Azure上安裝Linux後,時區都要另外調整,但在Google Cloud Platform上安裝沒遇到這問題。
sudo timedatectl set-timezone Asia/Taipei
安裝完整版VIM
使用Linux Debian的時候沒遇到這問題,但是之前用Ubuntu會遇到VIM不是完整版的情況,可以先刪除vim-common版,再安裝vim來解決此問題。
sudo apt remove vim-common
sudo apt install vim
安裝SSH
安裝SSH。
sudo apt install ssh
# 或是有些人會看到寫比較完整的
sudo apt-get install openssh-server
增加SSH Daemon的安全性設定
這邊可以限制哪些Linux帳號能夠登入,還能限制遠端SSH登入時不能夠使用密碼。如果改成不使用密碼登入,必須先設定好下面的免密碼SSH遠端登入步驟喔。
使用sudo nano /etc/ssh/sshd_config.d/myconfig.conf
進入編輯畫面輸入:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers jack ken
第一行是設定禁止root帳號從遠端登入,第二行是設定禁止使用密碼登入,第三行是設定允許使用RSA key登入。第一行與第三行的設置,其實不設定的預設值也就是我們要的結果,寫上去只是保險一點而已。
這邊特別介紹第四行是指定哪些使用者可登入,當我們指定jack與ken可以登入時,其他使用者都不能再使用SSH從遠端登入。如果不需要這個功能可以把這行刪除,或是使用註解讓他暫時失效。註解方式是在該行最前面加上井字號,例如:#AllowUsers jack ken
。我們也可以設定jack只能從內網登入,ken可以從內網與一個外部IP登入,例如以下範例:
AllowUsers jack@192.* ken@192.* ken@1.1.1.1
除了上述方法也可以直接修改/etc/ssh/sshd_config
這個檔案。但是打開sshd_config
會看到裡面有一句指令是Include /etc/ssh/sshd_config.d/*.conf
,代表寫在sshd_config.d
資料夾內任何.conf檔案的設定也會被讀取,因此推薦用第一個方法會比較好整理。
用任何方式寫完設定之後,要重新啟動SSH服務。
sudo systemctl restart ssh
客製化
增加一些我個人喜好的設置。
新增使用者
在Google Cloud Platform上面建立的VM,使用者名稱就是Google帳號的名稱(@gmail.com之前的部分)。基本上這個名稱的長度都比較長,我自己比較不喜歡在電腦上使用這麼長的名稱,加上使用macOS ssh連線上去的時候名稱不一致也比較麻煩,所以我都會再創一個新的使用者。
sudo useradd -m -U -G adm,dip,video,plugdev,google-sudoers -s /bin/bash kyle
關於useradd
的參數:
- 參數
-m
:建立家目錄 - 參數
-U
:建立User同名群組 - 參數
-s
:指定Login Shell - 參數
-G
:指定其他群組(非Primar群組),我把原本GCP給予預設使用者的群組複製過來
免密碼SSH遠端登入
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
如果使用macOS或是Linux,家目錄的.ssh/id_rsa.pub
會有ssh的公鑰,如果沒有可以透過ssh-keygen
指令建立一個。可以使用ssh-copy-ip
指令可以將公鑰複製到遠端VM上,但我們在GCP上面不開放使用普通密碼ssh登入,所以要將公鑰自行複製到VM裡面。
cat ~/.ssh/id_rsa.pub # 將輸出的訊息複製到遠端VM的~/.ssh/authorized_keys
VIM編輯器
這部分看每個人的需求,我比較喜歡有行號與標色的VIM。
set nu
set tabstop=4
set autoindent
syntax on
或是使用echo
一行搞定。
echo -e "set nu\nset tabstop=4\nset autoindent\nsyntax on" > ~/.vimrc
Alias別名設置
使用alias增加一些個人習慣使用的快捷別名,也是看個人喜好使用。建議更動前先備份,備份指令是cp ~/.bashrc ~/.bashrc.backup
。
alias l='ls -alh'
alias sctl='sudo systemctl'
或是使用echo
一行搞定。
echo -e "\nalias l='ls -alh'\nalias sctl='sudo systemctl'" >> ~/.bashrc
寫完不會立即生效,要重新登入或是使用指令:source ~/.bashrc
。