Supondo que o usuário tenha /bin/bash
como shell /etc/passwd
. Em seguida, ssh user@host command
executa o comando usando o Bash. No entanto, esse shell não é nem logado nem interativo, o que significa que ~/.bash_profile
nem ~/.bashrc
é originário. Nesse caso, como definir a PATH
variável de ambiente para que os executáveis possam ser encontrados e executados? É recomendável prefixar o comando real com source ~/.bashrc
?
18
.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
.Respostas:
Você tem poucas possibilidades:
PATH
servidor em~/.ssh/environment
(precisa ser ativado porPermitUserEnvironment yes
insshd_config
)..bashrc
: prefixe o comando com. ~/.bashrc
(ousource
)Depende do caso de uso, para que lado você irá.
fonte
~/.bashrc
não é necessário, acontece por padrão. De fato, parece-me uma má ideia.$PATH
não expande de~/.ssh/environment
, pelo menos não entraOpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
.PermitUserEnvironment
(padrão nas versões recentes)PATH="$PATH:/new/path"
ao meu~/.ssh/environment
, quando deveria ter sidoPATH=$PATH:/new/path
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:
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):E então basta iniciar um console ssh:
Nesse caso, os dois
bashrc
arquivos foram lidos porque cadaprofile
arquivo tinha comandos para incluí-los, não porque o shell de login os originou diretamente.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 Arquivosman sshd
para obter mais detalhes).fonte