我已經(jīng)使用 tmux 作為 screen 替換了一段時(shí)間。我發(fā)現(xiàn)使用和配置比 screen 更容易。我傾向于在我管理的服務(wù)器上運(yùn)行一個(gè) tmux 會話,以便一切都像上次連接時(shí)一樣,這就非常方便啊舞竿!還有就是,如果通過 SSH 操作線上服務(wù)器窿冯,只要幾分鐘不操作骗奖,連接斷掉我們還得重新連一遍,非常的煩人醒串。
不過我們是有方法可以通過 SSH + Tmux 的組合执桌,管理線上服務(wù)器的 session, 從而讓我們的操作不再丟失~
通過SSH自動附加到tmux會話
為了使這更方便,我希望能夠在使用 SSH 連接到服務(wù)器時(shí)自動附加到正在運(yùn)行的 tmux 會話 芜赌。SSH客戶端已經(jīng)能夠在連接時(shí)運(yùn)行命令仰挣。它的工作原理是這樣的:
ssh <hostname> <command>
不幸的是,這個(gè)命令并沒有發(fā)揮作用缠沈,當(dāng)我試圖附加到一個(gè) tmux 會話:
ssh <hostname> tmux a
not a terminal
經(jīng)過一番谷歌搜索膘壶,結(jié)果,你需要給你的 ssh 命令加上 -t
選項(xiàng) 洲愤。ssh手冊頁描述了這樣的選項(xiàng):
-t
強(qiáng)制偽分配颓芭。這可以用于在遠(yuǎn)程機(jī)器上執(zhí)行任意基于屏幕的程序,這可以是非常有用的柬赐,例如當(dāng)實(shí)現(xiàn)菜單服務(wù)時(shí)畜伐。
如果我們這樣做就對了:
ssh <hostname> -t tmux a
更短的命名
為了使命令更短些,我已經(jīng) ~/.bash_profile
或 ~/.zshrc
為我連接到的每個(gè)服務(wù)器添加了 bash 別名 躺率,像這樣:
alias myaliyun="ssh myaliyun -t tmux a"
現(xiàn)在,我們就可以在命令行輸入 myaliyun
就可以連到我們的服務(wù)器了万矾,并且自動進(jìn)入一個(gè) tmux session 中悼吱。不過也要記住,只要發(fā)出一個(gè) <ctrl> + b + d 就會斷開 tmux 會話并斷開SSH連接良狈,對的后添,這個(gè)操作會斷開所有連接!
SSH 保持連接
SSH 到服務(wù)器過一段時(shí)間不再操作薪丁,就會斷掉連接:
connection to port 22 broken pipe
你可以在本地機(jī)器或服務(wù)器上設(shè)置 keepalive遇西。
在客戶端 /etc/ssh/ssh_config
設(shè)置 ServerAliveInterval 或 在服務(wù)器計(jì)算機(jī)的 /etc/ssh/sshd_config
設(shè)置 ClientAliveInterval。如果仍然收到錯(cuò)誤严嗜,請嘗試減少間隔粱檀。
比如,可以在你本地的機(jī)器上 Linux:/etc/ssh/ssh_config
或 Mac: ~/.ssh/config
設(shè)置漫玄, :
Host *
ServerAliveInterval 120
這是設(shè)置多少秒鐘內(nèi)茄蚯,它應(yīng)該發(fā)送一個(gè) keepalive 消息到服務(wù)器压彭,這樣就再也不會斷開了,是不是很方便渗常!