Você está equiparando as configurações locais a remotas .
Localmente, uma instância do bash, o atual shell em execução no qual você escreve:
ssh user@host command
Irá executar o comando ssh (nada mais) como um cliente ssh.
Para fazer isso, o shell local não precisa iniciar um sub shell ou um novo shell ou login.
O comando é executado como um ls
comando é: localmente.
É o comando client ssh que abre uma conexão de rede com um sistema remoto , onde, se autenticado corretamente, um novo shell será iniciado para executar o comando escrito como argumento para o ssh ou, se nenhum argumento for fornecido, espere mais comandos nessa conexão.
Esse novo controle remoto shell necessariamente será um shell de login, pois o usuário remoto (nesse sistema) precisa ser autenticado para efetuar o login. Ou, se algum comando específico for fornecido, basta executar esse comando com os privilégios de usuário autenticado.
Você pode ver quais arquivos são originados adicionando um $file sourced
ao início de cada arquivo (no sistema remoto ) (é necessária a raiz para alterar os /etc/
arquivos):
$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done
E então basta iniciar um console ssh:
$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read
Nesse caso, os dois bashrc
arquivos foram lidos porque cada profile
arquivo tinha comandos para incluí-los, não porque o shell de login os originou diretamente.
$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read
Neste sistema, onde bashrc
é lido nos dois casos.
Não é necessário adicionar um source ~/.bashrc
ao comando para executar.
Alterar PATH
Tudo o que você precisa fazer é incluir as configurações corretas para alterar o "$ PATH", /etc/bash.bashrc
para todos os usuários que iniciam um shell neste sistema. Ou ~/.bashrc
para cada usuário que precisar. Você pode adicionar (ou editar) um esqueleto de um usuário .bashrc
ao/etc/skel/
ter qualquer novo usuário criado tem o arquivo correto disponível.
O acima é válido apenas para o bash. Se você precisar que a configuração funcione para todos os shells, provavelmente defina a variável de ambiente PATH usando o arquivo ssh ~/.ssh/environment
para cada usuário que precisar. Ou use /etc/ssh/sshrc
para uma configuração global no sistema em que o servidor ssh está em execução (leia a seção Arquivos man sshd
para obter mais detalhes).
.bashrc
é originário, mas provavelmente tem um teste de interatividade na parte superior. As coisas que você colocou antes dessa verificação devem ser aplicadas, e é isso que faço para forçar o PATH quando o servidor não permite o ambiente ou o uso do usuário~/.pam_environment
.