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


42

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

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

/var/www/websites

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

Answers:


61

有两种方法可以实现此目的:

  • 将服务器上的主目录更改为/ var / www / websites(这不是一个好主意)
  • 添加cd /var/www/websites到您的末尾.bashrc。我在我们的puppetmasters上使用这个,因为我一直想在/ etc / puppet / environments / dkaarsemaker那里,而不是我的homedir :-)

谢谢。我编辑了/ etc目录中的bash.bashrc文件。工作了请客:)
Bob Flemming

7
哦,我不会这样做,因为它会影响所有用户。最好编辑/home/yourlogin/.bashrc
Dennis Kaarsemaker

6
您可能希望将其放在您的.profile而不是中.bashrc,但这取决于您的用例。 .profile仅对交互式登录(例如shell).bashrc执行,但也对非交互式登录(例如scp,rsync等)执行。同样,.profile更有可能被非bash的shell(例如zsh)调用。
嘲讽了

当您执行“ exec bash”以刷新bash时,将执行.bashrc。更改特殊情况下的bashrc(在此使用ssh登录)没有用。
user3123159

14

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

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

可以为同一用户生成和使用多个密钥。服务器上的一个键可能包含命令,而另一个则可能不包含命令-通过这种方式,您可以在登录时选择预期的行为。您可以简单地用local 来包装它~/.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:~$ _

3
我更喜欢这个问题,而不是公认的问题。它允许多个用户使用服务器上的同一用户,并且仍然能够自定义您个人登录时发生的情况。与其他用户相比,它更加灵活和正确。
testuser的

1
您在这里必须非常小心,因为向〜/ .ssh / authorized_keys添加命令会影响其他基于ssh的工具,例如rsync,scp。这些命令将只是挂起
warunapww

1
您可以使用$SSH_ORIGINAL_COMMAND而不是/bin/bash -l使这些工具正常工作(在我的情况下为hg)。或者,$SHELL如果您不想对bash进行硬编码。不确定如何使工具和人工登录都能正常工作。
mpen

请注意:如果您禁用了PasswordAuthentication(请参阅askubuntu.com/questions/346857/…),并且不小心输入了错误的命令字符串,则可能使自己无法进入系统。
karan.dodia

6

默认情况下,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

然后,如果您登录并且目录是目录,它将在您登录时自动将目录更改为环境变量中指定的目录。


1
+1 LC_*技巧
东方
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.