«
【教程】为linux的文件管理器挂载的sftp网络磁盘增加一键同步ssh目录的功能

时间:2022-3-12    作者:JourinTown    分类: 计算机技术


Linux中的很多文件管理器可以直接把SFTP挂载为一个网络磁盘(直接在地址栏输入sftp:///username@yourserver.com即可),直接用本地的编辑器编辑,可以活过断网+甚至可以用keyring记住密码,这对于我们这种天天在集群上工作的人真的是究极福音,但是在这个磁盘中右键还是只能打开本地的shell,要是直接就能打开ssh的shell就好了,这样简直是把集群当作本地机器来运行了。这里以Thunar文件管理器为例,首先你需要在远程准备好这样一个脚本,我在这里称为ini.sh

# ini.sh
cd $1
eval $(resize)
zsh

也就是当我们source ini.sh xxx时,就会自动到cd xxx那个目录,并且修改shell的宽度为当前窗口的宽度,且加载我们自己喜欢的shell环境,我在集群上喜欢用zsh,当然您可以改为您喜欢的/bin/bash等等。这里加上eval $(resize)是因为有时候外部执行的命令会使得ssh误判真实终端的宽度而使得ssh界面宽度异常,这个命令可以重置宽度。

集群上这样一个slave脚本已经准备好了,接下来就是准备我们本地的右键菜单和脚本了,首先我们来编译Thunar的右键菜单:
编辑

我们点击跳出来的菜单中的加号,接下来跟着我配置


这里我们的命令写成

source ~/ihep.sh %d

就是说我们把我们目前的文件夹路径传给我们本地一个叫做ihep.sh的脚本,使用shell脚本的原因是需要执行的东西比较多,直接打一长串命令实在是不容易理解和修改。这个脚本的写法会在后文提到。

在第一页填完后记得来第二页选择文件类型,只有在你勾选了的文件类型上右键才会出现这个选项,我推荐全选,但是我们的集群上也没有视频和音乐,我就没有勾选那两个了。

现在您试试右键,是不是就出现了这个选项了?当然现在还不行,我们还缺少最后一个本地的脚本

右键

让我们来写一下这个ihep.sh吧

# ihep.sh
cmd='
expect -c "
spawn ssh -Y -t $username@$host source ini.sh '${1#*$username}';
expect { 
    {Are you sure you want to continue connecting *} {send -- yes\r;exp_continue;} 
    {*password:} {send -- $password\r;exp_continue;}
  };
interact 
"'
echo $cmd
xfce4-terminal -e "$cmd"

这个脚本实际上非常好理解,就是用先前文章如何通过外部脚本监控和实现高能所集群的自动化工作提到的expectspawn来自动ssh自动登录+输入密码。
主要的注意点时第三行中的'${1#*$username}',我们这么写的原因是一般linux挂载的sftp盘的路径除了您集群上的路径,还会加上一段挂载的地址,例如我的上面在集群的真实地址/xxx/yyy前还会显示本地地址为/run/sftp/my.website.com:username/,也就是实际上咱们在右键菜单中传入的%d参数实际上看起来像是/run/sftp/my.website.com:username/xxx/yyy,这个地址当然在集群上是找不到的了,因此利用'${1#*$username}'就类似python中spilt并取-1的结果,只保留username后面的真实地址部分,从而实现真实地址从本地的sftp磁盘传给集群上的脚本,如果你本地的文件管理器把sftp挂载在不同的地址,思路差不多,就是把前面必然出现的路径替换掉我这里的username即可。
上面这个脚本的最后一行中的终端模拟器实际上你可以换成任何你喜欢的,我用的i3wm,默认是xfce4-terminal,我这里就用了xfce4-terminal,一般的终端模拟器-e都是直接执行这个命令并打开终端模拟器的窗口。不过部分在-e中不支持spawn的终端模拟器,例如Alacritty,就可能会报错,如果是这样请换一个支持的终端模拟器。
希望这篇文章能帮助需要长期在远端集群ssh工作和敲代码的同志们!用熟悉的环境干活对于不喜欢终端化界面的一定是很大的帮助,且不论是稳定性还是易用性都远高于很多本地编辑器的插件。

标签: 集群 linux

版权所有:《豪言亂語
文章标题:《【教程】为linux的文件管理器挂载的sftp网络磁盘增加一键同步ssh目录的功能
除非注明,文章均为 《豪言亂語》 原创
转载请注明本文短网址:https://article.benhaotang.cn/pc/27.html  [生成短网址]