使用未安装在远程计算机上的外壳


9

给定方案:

  • 远程机器:SSH服务器;用户没有管理员权限;
  • 本地计算机:SSH客户端;用户具有管理员权限。

如果从本地登录到远程的用户希望使用未安装在remote上的shell 与remote进行交互,那么用户如何单独完成此操作?

示例:用户local上使用fish,并且也希望在remote上使用fish,但是remote仅安装了bashzsh


1
@mikeserv,谢谢。我无法理解反对投票的呼吁,我认为这是令人反感的陈词滥调和排斥主义者。我对标签的更改没有任何问题,但是对于将问题重新格式化以降低清晰度的方式,我的确有例外。我不使用聊天,因此无法在此处进行讨论。
sampablokuper 2014年

滥用黑体很难。而句子缺少很多的话。
吉尔斯(Gillles)“所以-别再作恶了”

2
@sampablokuper,您已经使用黑体字强调了点,以至于很难阅读;此外,当您强调所有内容时,您正在接近,什么也没有
derobert

1
@吉尔斯,我的问题中的句子都没有缺词。
sampablokuper 2014年

1
@derobert用于分类(因此也很清晰),就像许多计算机教科书一样。在我的问题中,存在三个相互作用的系统,它们的名称(或者,如果愿意,可以引用它们)以粗体显示。没有别的是黑体字。在有人问之前(我的意思是,真的!我已经被要求证明完全可理解的格式选择!),是的,其中一个系统是人为的,另外两个系统是非人的。和吉尔斯,谢谢,但是不,我不是要使用代码格式。我更喜欢仅对命令或代码使用代码格式,但我的问题都不存在。
sampablokuper 2014年

Answers:


6

在远程计算机上安装您喜欢的外壳。您不需要任何管理员权限,可以将程序安装在主目录中,这不太方便。请参见在没有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变体)。如果两台计算机的体系结构不兼容,您甚至可以在本地主目录中安装用于远程体系结构的程序。这可能不太方便,因为您必须正确设置路径才能使程序找到它们的库,配置文件和其他数据文件。

Emacs的eshellTramp兼容:如果在Eshell中更改为远程目录,则将在远程计算机上执行命令。


3

简单答案:不,您不能在远程控制盒上使用未安装在远程控制盒上的程序。

解决方法:您无需管理员权限即可在远程系统上安装Shell。您可以将其安装在主目录中,但可能必须从源代码进行编译。通常使用类似configure --prefix=${HOME}/local

最后一点:您不能将默认shell更改为非“官方” shell(请参阅参考资料/etc/shells),但可以exec fish.bashrc


2

用户可以使用sshfs将远程$ HOME挂载到本地计算机上。在这种情况下,用户不会直接在远程计算机上使用其选择的外壳,但是总比没有好。


2

基本方法是将shell可执行文件使用复制到远程主机,scp然后使用来执行ssh,例如

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

-t需要,使ssh分配一个tty,其执行远程命令时,它不会在默认情况下做的。

这假定您的远程主机运行的是相同的操作系统。如果不是,则需要弄清楚远程操作系统,并编译一个可以复制的(可能是静态的)二进制文件。


2

最明显的答案是“在远程计算机上安装命令”,这是最干净的解决方案,因此我们不应忽略它:

如果有可能以root身份安装命令,例如使用
sudo apt-get install fish
则可以这样运行命令:

ssh remote -t fish


问题是当我们无法在远程计算机上安装命令时该怎么办。
或更具体地说,是关于我们无法以root身份安装命令的情况。
这并不意味着我们根本无法安装!

仍然可以通过从源代码构建将命令安装在主目录中

这样做的好处是,它可以处理命令可能附带的所有相关支持文件,以及程序如何查找它们。在fishshell示例中,这些是补全函数等,如果我们仅复制fish二进制文件,则所有这些都不可用。

从源代码构建命令需要开发工具和所用库的开发文件,这可能太复杂了。

但是许多程序在源代码中捆绑了所有需要的内容,因此可能很容易。以前很难说,但是可以尝试一下。

要将命令安装到主目录中,configure安装路径一起提供 -需要在构建说明中进行检查。例如:

mkdir ~/local
./configure --prefix=~/local 
make
make install

请注意,它sudo make install与往常不一样-因为在本地安装它的整个重点是这里不需要sudo。

有关从源代码安装程序的一般信息,请参见askubuntu.SE:如何安装.tar.gz(或.tar.bz2)文件?


0

我认为您不能在一台机器上运行另一台机器上的外壳。在远程计算机上运行它的唯一方法是安装它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.