最一開始學習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