引子

不想额外下载一个软件来进行ssh管理。俺发现俺现在使用的终端,其附带的功能完全可以打造一个ssh工具。

本文通过ssh+kitty实现了以下功能

便捷的ssh连接 快速复制一个ssh链接

文件上传下载 无需拖拽,纯命令上传下载

属于你自己的终端环境 多用户协作下无敌的爽感

便捷的连接

在kitty中连接ssh需要使用kitten ssh username@host

可以在.bashrc中添加

1
2
3
4
5
6
7
ssh(){
if [ "$TERM" = "xterm-kitty" ]; then
kitten ssh $*
else
command ssh $*
fi
}

ssh配置

是不是厌倦了每次都输入ssh username@host,你是时候使用ssh配置了

用户的ssh配置在~/.ssh/config

示例配置

1
2
3
4
5
6
7
# 这样会让配置文件显得更有调理
Include ~/.ssh/config.d/*.conf
Host home_pc
HostName 192.168.0.100
User root
Port 22
IdentityFile ~/.ssh/id_ed25519

这样就可以使用ssh home_pc愉快的连接了

复制当前ssh和当前环境变量

需要打开shell集成

1
2
# lunch --cwd=current 会复制当前的环境变量,如果添加了ssh集成,
map kitty_mod+shift+enter launch --cwd=current

用法alt+shift+enter

文件传输

在kitty中使用kitten transfer可以进行下载或上传文件

由于命令过于长,俺在bashrc中定义了一个方法,如果传入的第一个文件不存在则认为是上传,存在则是下载

1
2
3
4
5
6
7
8
9
10
11
12
# kitty upload file
kcp(){
if [ -e $1 ]; then
# 本地不存在有该文件则认为是从本地下载到远程
kitten transfer $*
return 0
else
# 本地存在该文件则认为是从远程上传到本地
kitten transfer --direction=upload $*
return 0
fi
}

用法:

kcp file1 file2

打造属于你自己的的终端环境

通过kitty配置,为每一个连接到的ssh服务器配置自己熟悉的alias、软件、环境变量。

配置kitty

编辑~/.config/kitty/ssh.conf

1
2
3
4
5
6
7
8
9
10
# 主机名
hostname ka
# zsh
env ZDOTDIR=$HOME/.kitty
env remote_home=$HOME/.kitty
copy --dest .kitty/.zshrc .zshrc
copy --dest .kitty/.bashrc .bashrc_kitty_remote
# vim
env VIMINIT=source ".kitty/.vimrc"
copy --dest .kitty/.vimrc .vimrc_kitty_remote

配置了这个配置文件后,当连接到主机ka时,kitty会自动复制当前主机的zshrc、bashrc和vimrc到主机ka上。而且不会破坏其原有的配置。

其他方便的配置

edit-in-kitty alias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# kitty edit file
kvim () {
kitten edit-in-kitty $@
}
skvim(){
local file="$1"
if [ ! -e "$file" ]; then
echo "错误: 文件 $file 不存在。"
return 1
fi
local original_permissions
original_permissions=$(stat -c "%a" "$file")
sudo chmod 777 "$file"
kitten edit-in-kitty $file
sudo chmod "$original_permissions" "$file"
}
kvi () {
kitten edit-in-kitty $@
}

参考

kitty