Em um Mac executando o OSX 10.7.5, preciso definir o PATH para usuários não interativos que se conectam via ssh e são autenticados usando LDAP. É a mesma pergunta que foi feita (e respondida) aqui:
mas não estou familiarizado o suficiente com PAM ou LDAP para entender completamente a resposta.
Parece que preciso:
add a line to /etc/pam.d/sshd saying "auth required pam_env.so"
create a file named /etc/security/pam_env.conf
mas a documentação do pam_env.conf é realmente confusa e não sei dizer se preciso de um valor DEFAULT ou OVERRIDE.
Estou certo de que essas são as etapas corretas? Qual é a linha que devo colocar em pam_env.conf?
Obrigado, Chris
ps Tentei colocar a linha "auth required pam_env.so debug" em /etc/pam.d/sshd e não estou vendo nada em /var/log/system.log que pareça vir de pam_env.so. Também criei /etc/security/pam_env.conf e coloquei nele a linha "PATH DEFAULT=/usr/fred OVERRIDE=/usr/george" e não teve nenhum efeito visível no PATH.
pps Se eu executar:
ssh USER@MACHINE echo \$SHELL
Diz /bin/bash. Se eu entrar no MACHINE e adicionar esta linha ao /etc/bashrc:
export Test=Fred
e voltar para minha máquina e executar:
ssh USER@MACHINE echo \$Test
não retorna nada. Quando faço logon dessa maneira usando LDAP, ele não executa /etc/bashrc.
ppps Algumas informações adicionais que podem ser importantes: Em MACHINE não existe nenhum usuário local chamado USER. MACHINE foi configurado para fazer autenticação LDAP, então quando eu ssh USER@MACHINE, meu $HOME é definido como /Network/Servers/blah/blah/Users/USER. Se eu editar /Network/Servers/blah/blah/Users/USER/.bashrc para definir o PATH, funciona corretamente para mim, mas não é uma ótima solução porque significa que cada pessoa que deseja acessar este servidor deve editar seu rede .bashrc.
Responder1
Esta é uma modificação dehttps://askubuntu.com/questions/382485/ssh-how-to-force-execution-of-a-script-etc-sshrc-forcecommand-on.
Com o seguinte você pode forçar o fornecimento /etc/bashrc
de todos os logins SSH, interativos ou não. Isso pode causar alguns problemas para os usuários que dependem de /etc/bashrc
não serem executados para logins não interativos, portanto, proceda com cautela (embora seja exatamente isso que você está pedindo, então provavelmente conhece as implicações).
Primeiro adicione ForceCommand /usr/local/bin/sshd_envs
ao /etc/sshd_config
. Em seguida, coloque o seguinte em /usr/local/bin/sshd_envs
:
#!/bin/bash
source /etc/bashrc
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
eval $SSH_ORIGINAL_COMMAND
else
exec $SHELL
fi
Quaisquer que sejam as configurações de ambiente que você colocar, /etc/bashrc
entrarão no ambiente para cada login SSH.
Observe que o padrão /etc/bashrc
para OS/X será encerrado imediatamente após a avaliação das primeiras linhas (porque PS1 não está configurado para shells não interativos):
if [ -z "$PS1" ]; then
return
fi
Portanto, comente essas linhas ou coloque tudo o que deseja que seja avaliado para seus logins SSH não interativos antes dessas linhas.