相关疑难解决方法(0)

sh 通过 ssh 启动文件

在任何 sh shell 启动之前,我需要执行一些重要的命令。这是在 SSH 命令 ( ssh host somecommand) 和其他运行命令的程序中传递 SSH 命令所必需的。

在我的.profile我有这个:

ihammerhands@wreckcreations:~> cat .profile
#specific environment and startup programs
export PS1="\u@wreckcreations:\w> "
export PYTHONPATH=~/python/lib/python2.4/site-packages
export PATH=$PATH:~/bin:~/python/bin
Run Code Online (Sandbox Code Playgroud)

但是,这失败了:

W:\programming\wreckcreations-site\test-hg>ssh name@host echo $PATH
Enter passphrase for key '/home/Owner/.ssh/id_rsa':
/usr/local/bin:/bin:/usr/bin
Run Code Online (Sandbox Code Playgroud)

注意缺少的 PATH 选项

sh 配置文件的正确名称是什么?注意:我没有 root 访问权限,也不希望将其应用于其他用户。有没有另一种方法可以做到这一点?


编辑:它似乎/bin/sh链接到bash,这并不奇怪。令人惊讶的是,我的个人资料仍然被忽略。有什么建议?

shell bash ssh profile

10
推荐指数
2
解决办法
1万
查看次数

使用 ssh 和非绝对命令时“找不到命令”

我想通过 ssh 使用命令:

ssh myuser@myhost mycommand
Run Code Online (Sandbox Code Playgroud)

但这样做我总是得到:

sh: mycommand: command not found
Run Code Online (Sandbox Code Playgroud)

使用以下显然有效:

ssh myuser@myhost /usr/local/bin/mycommand
Run Code Online (Sandbox Code Playgroud)

我明白为什么:这是因为该命令以某种方式在非登录 shell 上执行。

在我的 ssh 命令中使用完整命令或任何其他参数在我的场景中不是一个选项。我的命令是由我无法触及的脚本执行的,并且除了这个之外,还可以在每个主机上运行。

给我带来问题的主机是 Synology NAS,该myuser的 /etc/passwd 设置是:

myuser:x:1048:100::/var/services/homes/myuser:/bin/sh
Run Code Online (Sandbox Code Playgroud)

再次:

我可以:

  • ssh 作为 myuser 进入 myhost
  • 使用mycommand提供的绝对路径以 myuser 身份执行
  • 已经在 myhost 上时执行 mycommand(非绝对)(通过 ssh)

我不能不想要:

  • 执行:ssh myuser@myhost mycommand(非绝对,无附加参数)

shell ssh sshd synology

7
推荐指数
2
解决办法
2万
查看次数

有没有办法在通过 SSH 连接到主机时推送 shell 配置信息?

我知道如何将 GNOME 终端(或 xterms!)关于最后一个退出代码的提示设置为绿色/红色:

vi .bashrc

export PROMPT_COMMAND='PS1="`
if [[ \$? = "0" ]];
then echo "\\[\\033[0;32m\\]";
else echo "\\[\\033[0;31m\\]";
fi`[\u@\h \w]\[\e[m\] "'

export PS1
Run Code Online (Sandbox Code Playgroud)

图片中:

在此处输入图片说明

但是如果我登录到远程服务器,那么这些颜色设置就不起作用了!

我怎样才能将它设置为在远程终端上工作?不幸的是,我无法将上述行附加到远程服务器.bashrc

shell prompt ssh environment-variables

5
推荐指数
1
解决办法
5312
查看次数

'ssh <host> <command>' 可以配置为始终加载服务器端启动文件吗?

我想运行远程 ssh 命令并让它们默认加载服务器端启动文件。我要寻找一个解决方案要求:

  • 根目录配置
  • 每次向命令添加额外的样板
  • 跨多个文件复制环境变量

希望将本地环境变量传输到远程 shell。我想使用 vanillassh <host> <command>语法运行远程命令,并让它使用与远程登录会话相同的环境运行。

背景

以下假设bash用于简单起见

默认情况下,远程 ssh 命令启动一个非交互式、非登录的 shell。引用手册页:

如果指定了命令,它将在远程主机上执行,而不是在登录 shell 上执行。

您可以通过运行在 shell 上更明确地看到这一点:

# the lack of 'i' indicates non-interactive
$ ssh localhost 'echo $-'
hBc 

$ ssh localhost 'shopt login_shell'
login_shell     off
Run Code Online (Sandbox Code Playgroud)

但是如果您的远程命令需要设置某些环境变量怎么办?作为一个非交互式、非登录的 shell 意味着 .bash_profile不会也.bashrc不会被采购。

这是有问题的,例如,如果您使用perlbrewvirtualenv等工具并希望在远程命令中使用自定义解释器:

$ which perl
/home/calid/perl5/perlbrew/perls/perl-5.20.1/bin/perl

$ ssh localhost 'which perl'
/usr/bin/perl …
Run Code Online (Sandbox Code Playgroud)

bash ssh bashrc

5
推荐指数
1
解决办法
1232
查看次数

标签 统计

ssh ×4

shell ×3

bash ×2

bashrc ×1

environment-variables ×1

profile ×1

prompt ×1

sshd ×1

synology ×1