给定方案:
- 远程机器:SSH服务器;用户没有管理员权限;
- 本地计算机:SSH客户端;用户具有管理员权限。
如果从本地登录到远程的用户希望使用未安装在remote上的shell 与remote进行交互,那么用户如何单独完成此操作?
示例:用户在local上使用fish,并且也希望在remote上使用fish,但是remote仅安装了bash和zsh。
给定方案:
如果从本地登录到远程的用户希望使用未安装在remote上的shell 与remote进行交互,那么用户如何单独完成此操作?
示例:用户在local上使用fish,并且也希望在remote上使用fish,但是remote仅安装了bash和zsh。
Answers:
在远程计算机上安装您喜欢的外壳。您不需要任何管理员权限,可以将程序安装在主目录中,这不太方便。请参见在没有root用户的情况下在32位debian 5 上安装,如何在没有sudo特权的情况下在本地安装程序?,跟踪程序和其他问题。
如果要自动登录自己安装的外壳程序而不是默认外壳程序,请参阅将zsh设置为没有root用户访问权限的默认外壳程序
如果您要做的只是操作远程文件,则可以使用SSHFS在本地计算机上安装远程目录树。
mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/
…
fusermount -u ~/remote.d
如果您的主目录中没有空间,或者它是一个共享帐户,则可以设置反向SSH隧道并使用SSHFS将本地目录树安装在远程计算机上,前提是两台计算机都运行相同的体系结构(同一处理器类型上的相同UNIX变体)。如果两台计算机的体系结构不兼容,您甚至可以在本地主目录中安装用于远程体系结构的程序。这可能不太方便,因为您必须正确设置路径才能使程序找到它们的库,配置文件和其他数据文件。
用户可以使用sshfs将远程$ HOME挂载到本地计算机上。在这种情况下,用户不会直接在远程计算机上使用其选择的外壳,但是总比没有好。
最明显的答案是“在远程计算机上安装命令”,这是最干净的解决方案,因此我们不应忽略它:
如果有可能以root身份安装命令,例如使用
sudo apt-get install fish
,
则可以这样运行命令:
ssh remote -t fish
问题是当我们无法在远程计算机上安装命令时该怎么办。
或更具体地说,是关于我们无法以root身份安装命令的情况。
这并不意味着我们根本无法安装!
仍然可以通过从源代码构建将命令安装在主目录中。
这样做的好处是,它可以处理命令可能附带的所有相关支持文件,以及程序如何查找它们。在fish
shell示例中,这些是补全函数等,如果我们仅复制fish
二进制文件,则所有这些都不可用。
从源代码构建命令需要开发工具和所用库的开发文件,这可能太复杂了。
但是许多程序在源代码中捆绑了所有需要的内容,因此可能很容易。以前很难说,但是可以尝试一下。
要将命令安装到主目录中,configure
随安装路径一起提供 -需要在构建说明中进行检查。例如:
mkdir ~/local
./configure --prefix=~/local
make
make install
请注意,它sudo make install
与往常不一样-因为在本地安装它的整个重点是这里不需要sudo。
有关从源代码安装程序的一般信息,请参见askubuntu.SE:如何安装.tar.gz(或.tar.bz2)文件?
我认为您不能在一台机器上运行另一台机器上的外壳。在远程计算机上运行它的唯一方法是安装它。