题 SSH到服务器时更改默认目录


我想知道是否有办法更改我在SSH到我的Ubuntu服务器后输入的默认目录。

我登录服务器时有99%的时间访问特定目录中的文件:

/var/www/websites

是否有我可以编辑的配置文件,以确保我在登录时直接进入此目录?


23
2018-04-15 17:19






答案:


有两种方法可以实现这一目标:

  • 将服务器上的homedirectory更改为/ var / www / websites(这不是一个好主意)
  • cd /var/www/websites 到你的结束 .bashrc。我在我们的木偶剧上使用这个,因为我总是希望在/ etc / puppet / environments / dkaarsemaker那里而不是我的homedir :-)

40
2018-04-15 17:22



谢谢。我编辑了位于/ etc目录中的bash.bashrc文件。工作了:) - Bob Flemming
哦,我不会这样做,因为它会影响所有用户。最好编辑/home/yourlogin/.bashrc - Dennis Kaarsemaker
哦好的,谢谢你的提示! - Bob Flemming
你可能想把它放在你的 .profile 代替 .bashrc,但这取决于您的用例。 .profile 仅针对交互式登录(例如shell)执行但是 .bashrc 也用于非交互式登录(例如scp,rsync等)。此外,.profile更有可能被不是bash的shell调用(例如zsh)。 - phord


如果使用密钥进行SSH登录,则可以通过预先添加来更改路径 command= 在钥匙之前 ~/.ssh/authorized_keys 在你的 远程 服务器。例:

command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key

可以为同一个用户生成和使用多个密钥。服务器上的一个密钥可能包含另一个可能没有的命令 - 这样您就可以在登录时选择预期的行为。你可以简单地把它包起来 本地  ~/.ssh/config

Host websites-my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key1>  #on the server key with "command"
    User webmaster

Host my-host
    HostName <realhostname>
    IdentityFile ~/.ssh/<key2>  #on the server key without command
    User webmaster

这将是会发生的事情:

local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _

要么:

local$ ssh my-host
webmaster@realhostname:~$ _

7
2017-12-24 01:03



我更喜欢这个被接受的问题。它允许多个用户在服务器上使用相同的用户,并且仍然能够自定义当您亲自登录时发生的事情。比另一个用户更灵活,更正确。 - testuser
你必须非常小心,因为向〜/ .ssh / authorized_keys添加命令会影响基于ssh的其他工具,如rsync,scp。这些命令只会挂起 - warunapww


默认情况下,Openssh sshd从客户端接受这些环境变量:

AcceptEnv LANG LC_*

您可以使用它将客户端的本地环境中的值发送到服务器,如下所示:

LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server

您可以将SendEnv指令放在〜/ .ssh / config中,这样就不必将它包含在命令行中。

如果将以下内容放在〜/ .profile中(仅影响交互式登录,请使用.profile,以影响所有登录使用.bashrc):

if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
  cd "$LC_CDPATH";
fi

然后,当您登录时,它将自动将目录更改为环境变量中指定的目录,如果已指定,则它是否是目录。


2
2017-10-25 14:38



+1为 LC_* 特技 - Orient