首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SSH会话中自动启动tmux?

如何在SSH会话中自动启动tmux?
EN

Stack Overflow用户
提问于 2014-12-23 10:18:18
回答 11查看 60.7K关注 0票数 117

我有十个左右的服务器,我定期使用SSH连接到这些服务器。每台计算机在我的本地计算机上都有一个条目

文件。

为了避免在Internet连接不可避免地中断时失去对运行进程的控制,我总是在

会话。我希望有一种方法可以让tmux在每次启动SSH连接时都自动连接,这样我就不必总是键入

在我用SSH登录之后。

不幸的是,这并不像我最初希望的那样简单。

我不想将任何命令添加到

因为我只想将它用于SSH会话,而不是本地会话。

添加

在服务器上只会导致错误

在连接之后引发,即使

选项添加到本地SSH配置文件中该服务器的行中。

EN

回答 11

Stack Overflow用户

发布于 2016-10-22 21:02:51

服务器端配置:

要在通常通过SSH (且仅通过SSH)登录时自动启动远程服务器上的tmux,请编辑

远程服务器上的用户或根用户(或两者)的相应权限:

代码语言:javascript
运行
复制
if [[ -n "$PS1" ]] && [[ -z "$TMUX" ]] && [[ -n "$SSH_CONNECTION" ]]; then
  tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux
fi

此命令创建一个tmux会话,名为

如果不存在,则重新附加到已存在的具有该名称的会话。如果您的连接中断,或者当您在几周前忘记了一个会话时,每次SSH登录都会自动将您带回您离开的tmux-ssh会话。

从客户端连接:

没什么特别的,只是

..。

票数 106
EN

Stack Overflow用户

发布于 2015-09-28 15:48:58

连接:

代码语言:javascript
运行
复制
ssh user@host -t "tmux new-session -s user || tmux attach-session -t user"

会话期间:

使用

完成会话

(tmux窗口关闭)或

临时分离

并稍后再次连接到它。

记住!

如果您的服务器重新启动会话丢失!

当您在tmux中时,您可以随时使用

查看

会话列表

并将电流切换到另一个。

修复你的.bashrc:

我建议你在你的

代码语言:javascript
运行
复制
function tmux-connect {
    TERM=xterm-256color ssh -p ${3:-22} $1@$2 -t "tmux new-session -s $1 || tmux attach-session -t $1"
}

它使用

默认端口。还要定义快速连接别名:

代码语言:javascript
运行
复制
alias office-server='tmux-connect $USER 192.168.1.123'
alias cloud-server='tmux-connect root my.remote.vps.server.com 49281'

无密码登录:

如果你不想每次都输入密码而不是生成

关键字

自动登录

代码语言:javascript
运行
复制
ssh-keygen -t rsa
eval "$(ssh-agent -s)" && ssh-add ~/.ssh/id_rsa

将您的公钥放到远程主机上:

代码语言:javascript
运行
复制
ssh-copy-id -p  user@hostname

其他提示:

如果您想使用

临时会话id

,它与本地bash会话相对应,用作

tmux

id:

代码语言:javascript
运行
复制
SID=$USER-$BASHPID
ssh user@host -t "tmux new-session -s $SID || tmux attach-session -t $SID"
票数 26
EN

Stack Overflow用户

发布于 2017-05-06 19:10:30

我使用了@kingmeffisto中的代码行(我不允许评论这个答案),并且我添加了一个出口,因此终止tmux也会终止ssh连接。然而,这中断了SFTP会话,所以我必须检查

而不是

..。

2018年4月编辑:新增交互终端测试,通过

允许像Ansible这样的工具工作。

代码语言:javascript
运行
复制
if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
    tmux attach-session -t ssh || tmux new-session -s ssh
    exit
fi
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27613209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档