Frequentemente, preciso fazer login em um dos vários servidores e acessar um dos vários diretórios nessas máquinas. Atualmente eu faço algo desse tipo:
localhost ~] $ ssh somehost Bem-vindo ao somehost! somehost ~] $ cd / some / directory / algum lugar / chamado / Foo somehost Foo] $
Eu tenho scripts que podem determinar em qual host e em qual diretório eu preciso entrar, mas não consigo descobrir uma maneira de fazer isso:
localhost ~] $ go_to_dir Foo Bem-vindo ao somehost! somehost Foo] $
Existe uma maneira fácil, inteligente ou de fazer isso?
ssh -t xxx.xxx.xxx.xxx "cd /directory_wanted && exec \$SHELL"
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
ssh server -t "cd /my/remote/directory; bash --login"
Você poderia adicionar
para o seu
.bashrc
arquivo (ou.profile
como você o chama) no outro host. Dessa forma, não importa o que você faça ou de ondessh
, sempre que fizer logon no servidor, ele será direcionadocd
para o diretório apropriado para você, e tudo que você precisa fazer é usá-lossh
normalmente.É claro que a solução do rogeriopvl também funciona, mas é um pouco mais detalhada, e você deve se lembrar de fazê-lo todas as vezes (a menos que faça um pseudônimo), para que pareça um pouco menos "divertido".
fonte
Eu criei uma ferramenta para SSH e CD em um servidor consecutivamente - apropriadamente chamado sshcd . Para o exemplo que você deu, basta usar:
Deixe-me saber se você tiver alguma dúvida ou problema!
fonte
Minha abordagem preferida é usar o arquivo de configuração SSH (descrito abaixo), mas existem algumas soluções possíveis, dependendo do seu uso.
Argumentos da linha de comando
Acho que a melhor resposta para essa abordagem é a resposta de christianbundy à resposta aceita:
O uso de aspas duplas permitirá que você use variáveis de sua máquina local, a menos que elas escapem (como
$SHELL
aqui). Como alternativa, você pode usar aspas simples e todas as variáveis que você usar serão as da máquina de destino:Função Bash
Você pode simplificar o comando envolvendo-o em uma função bash. Digamos que você queira apenas digitar isso:
Você pode fazer isso funcionar adicionando isso ao seu
~/.bashrc
:Se você estiver usando uma variável que existe na máquina remota para o diretório, escape-a ou coloque-a entre aspas simples. Por exemplo, isso fará o cd para o diretório que está armazenado na
JBOSS_HOME
variável na máquina remota:Arquivo de configuração SSH
Se você deseja ver esse comportamento o tempo todo para hosts específicos (ou qualquer) com o comando ssh normal sem precisar usar argumentos extras da linha de comando, defina as opções
RequestTTY
eRemoteCommand
no seu arquivo de configuração ssh.Por exemplo, eu gostaria de digitar apenas este comando:
mas deseja que ele sempre se comporte como este comando:
Então eu adicionei isso ao meu
~/.ssh/config
arquivo:Agora, essa regra se aplica a qualquer host com "aplicativos" em seu nome de host.
Para mais informações, consulte http://man7.org/linux/man-pages/man5/ssh_config.5.html
fonte
Com base nas adições à resposta de @ rogeriopvl, sugiro o seguinte:
O encadeamento de comandos por
&&
fará com que o próximo comando seja executado apenas quando o anterior tiver sido bem-sucedido (ao contrário de usar;
, que executa comandos sequencialmente). Isso é particularmente útil quando é necessáriocd
um diretório executando o comando.Imagine fazer o seguinte:
O diretório
teminal
não existe, o que faz com que você permaneça no diretório inicial e remova todos os arquivos lá com o seguinte comando.Se você usa
&&
:O comando falhará depois de não encontrar o diretório.
fonte
No meu caso muito específico, eu só queria executar um comando em um host remoto, dentro de um diretório específico de uma máquina escrava Jenkins:
Mas minha máquina não pôde executar o ssh (não podia alocar uma pseudo-tty, suponho) e me manteve dando o seguinte erro:
Eu poderia contornar esse problema passando "cd para dir + meu comando" como um parâmetro do comando ssh (para não precisar alocar um pseudo-terminal) e passando a opção -T para informar explicitamente ao comando ssh que eu não precisa de alocação pseudo-terminal.
fonte
Eu uso a variável de ambiente CDPATH
fonte
dando um passo adiante com a
-t
ideia. Eu mantenho um conjunto de scripts chamando o abaixo para ir a lugares específicos nos meus hosts visitados com frequência. Eu mantenho todos eles dentro~/bin
e mantenho esse diretório no meu caminho.fonte
Outra maneira de acessar diretamente após o login é criar "Alias". Ao fazer login no seu sistema, basta digitar esse alias e você estará nesse diretório.
Exemplo: Alias = myfolder '/ var / www / Folder'
Depois de fazer login no seu sistema, digite esse alias (isso funciona em qualquer parte do sistema)
esse comando, se não estiver no bashrc, funcionará para a sessão atual. Então você também pode adicionar esse alias ao bashrc para usá-lo no futuro
$ myfolder => leva você para essa pasta
fonte
O próprio SSH fornece um meio de comunicação, não sabe nada sobre diretórios. Como você pode especificar qual comando remoto executar (este é - por padrão - seu shell), eu começaria por aí.
fonte
simplesmente modifique sua casa com o comando:
usermod -d /newhome username
fonte