É claro que você tem um problema de caminho já que seu script de implementação não consegue encontrar coisas que estão definitivamente no caminho quando você faz um login normal do ssh.
A primeira coisa a fazer para confirmar que você tem um problema no PATH é atualizar o script de implantação para registrar a saída de env
ou pelo menos echo $PATH
. Eu estou supondo que a forma como seu script de implantação é chamado, $ PATH não está definido como seria de esperar. Esta saída de depuração confirmará / negará minha teoria.
Eu olhei para o tutorial que você seguiu. Você provavelmente deve certificar-se de atualizar o command=
para command="/bin/sh /path/to/your/script..."
se ainda não tiver certeza de que seu script é executado pelo shell correto.
Se você tiver um problema PATH, uma correção rápida / suja é apenas definir explicitamente o PATH no início do seu script de implantação.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Explicação detalhada e outras opções ...
No linux, quando os comandos são executados, eles herdam o ambiente do processo pai.
Quando você faz login como usuário normal via SSH, há coisas que acontecem (como executar / etc / bashrc / etc / profile ~ / .bash_profile ~ / .bashrc etc). Nesse ponto, você pode ter atualizado o ambiente do seu processo fazendo coisas como export PATH="$PATH:~/mybin"
nesses scripts. Agora, qualquer processo futuro que você execute herdará seu ambiente atual.
Executar um comando em vez de obter um shell de login significa que o comando é executado pelo daemon ssh e herdará o ambiente do processo do daemon ssh ... que provavelmente é diferente de seu ambiente como um usuário conectado.
A man page para chaves autorizadas aborda o que acontece após a autenticação. Em relação ao meio ambiente:
- Reads the file ~/.ssh/environment, if it exists, and users are
allowed to change their environment. See the
PermitUserEnvironment option in sshd_config(5).
Portanto, o local apropriado para configurar o ambiente para o processo é em ~/.ssh/environment
, em que ~
é o diretório inicial do usuário autenticado para executar o comando. Você também precisa verificar seu sshd_config para certificar-se de que PermitUserEnvironment é permitido.
~/.ssh/environment
format também é especificado na página man do curso.
This file is read into the environment at login (if it exists).
It can only contain empty lines, comment lines (that start with
'#'), and assignment lines of the form name=value. The file
should be writable only by the user; it need not be readable by
directory becomes accessible. This file should be writable only
by the user, and need not be readable by anyone else.
Uma maneira alternativa de especificar o ambiente sem usar o método mencionado acima é usar a opção environment="NAME=value"
no arquivo authorized_keys. Veja a página de manual que eu relacionei acima para detalhes.