Alterar o diretório padrão quando eu SSH no servidor

42

Fiquei me perguntando se existe uma maneira de alterar o diretório padrão em que fui colocado depois do SSH no meu servidor Ubuntu.

99% do tempo em que estou entrando no meu servidor, é para acessar arquivos em um diretório específico:

/var/www/websites

Existe um arquivo de configuração que eu possa editar que garanta que eu seja colocado diretamente nesse diretório quando eu fizer o login?

Bob Flemming
fonte

Respostas:

62

Existem duas maneiras de conseguir isso:

  • Altere seu diretório doméstico no servidor para / var / www / websites (isso não é realmente uma boa ideia)
  • adicione cd /var/www/websitesao final do seu .bashrc. Eu uso este em nossos puppetmasters, pois sempre quero estar em / etc / puppet / environment / dkaarsemaker lá em vez de em minha casa :-)
Dennis Kaarsemaker
fonte
Obrigado. Editei o arquivo bash.bashrc, localizado no diretório / etc. Trabalhou um mimo :)
Bob Flemming
7
Ooh, eu não faria isso, pois afeta todos os usuários. Melhor edição /home/yourlogin/.bashrc
Dennis Kaarsemaker
6
Você pode colocar isso no seu e .profilenão no .bashrc, mas isso depende do seu caso de uso. .profileé executado apenas para logins interativos (por exemplo, shell), mas .bashrctambém é executado para logons não interativos (por exemplo, scp, rsync, etc.). Além disso, é mais provável que .profile seja chamado por shells que não são do bash (por exemplo, zsh).
phord
.bashrc é executado quando você executa "exec bash" para atualizar seu bash. Alterar o bashrc para um caso de uso especial (aqui login ssh) não é útil.
user3123159 20/01
14

Se você usar chaves para login SSH, em seguida, você pode alterar o caminho, antecedendo command=a antes de uma chave em ~/.ssh/authorized_keysem seu remoto servidor. Exemplo:

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

É bom gerar e usar várias chaves para o mesmo usuário. Uma chave no servidor pode conter o comando que a outra não - dessa maneira, você seleciona o comportamento esperado no momento do login. Você pode simplesmente encerrar com 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

Isto é o que irá ocorrer:

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

ou:

local$ ssh my-host
webmaster@realhostname:~$ _
gertas
fonte
3
Eu prefiro esta pergunta acima da aceita. Ele permite que vários usuários usem o mesmo usuário no servidor e ainda possam personalizar o que acontece quando você efetua login. Muito mais flexível e correto como o outro.
testuser 14/11
1
Você precisa ter muito cuidado aqui, pois adicionar comandos às ~ / .ssh / allowed_keys afeta as outras ferramentas baseadas em ssh como rsync, scp. Esses comandos simplesmente travam
warunapww 26/06
1
Você pode usar em $SSH_ORIGINAL_COMMANDvez de /bin/bash -lfazer as ferramentas funcionarem (no meu caso, hg). Ou $SHELLse você não deseja codificar com firmeza o bash. Não sei como fazer com que ferramentas e logins humanos funcionem.
mpen 11/09
Apenas uma palavra de cautela: Se você desabilitou a PasswordAuthentication (consulte askubuntu.com/questions/346857/… ) e acidentalmente digitou incorretamente sua cadeia de comando, você pode se bloquear do sistema.
karan.dodia 17/10
6

O Openssh sshd, por padrão, aceita estas variáveis ​​de ambiente do cliente:

AcceptEnv LANG LC_*

Você pode usar isso para enviar um valor do ambiente local do cliente para o servidor como este:

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

Você pode colocar a diretiva SendEnv em ~ / .ssh / config para não precisar incluí-la na linha de comando.

Se você colocar o seguinte em seu ~ / .profile (para afetar apenas logons interativos, use .profile, para afetar todos os logons, use .bashrc):

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

Em seguida, ele mudará automaticamente o diretório para o especificado na variável de ambiente quando você efetuar login, se for especificado e se for um diretório.

Victor Jerlin
fonte
1
+1 para LC_*truque
Orient