Você perguntou sobre a restrição da funcionalidade às conexões de server1 . Eu faria isso com ssh . O código para modificar usuários é para Debian / Ubuntu. Os princípios e a maioria dos outros códigos devem ser razoavelmente universais. Depois de fazer essa configuração, para executar o script em server2 de server1 , você emitirá este comando:
$ ssh -i ~/.ssh/script_identity.pub ruser@server2
O comando acima se conectará a server2 e executará seu script, não exigindo mais intervenção para ssh ou sudo authentication. O arquivo de chave pública ssh é o único acesso para executar o script remotamente em server2 , permitindo que você decida quais máquinas e / ou contas podem acessar o script em relação a ssh .
O código para realizar essas tarefas é exemplificado abaixo desta descrição.
Esta configuração requer uma conta dedicada em server2 . Existem muitas boas razões, uma das quais você já mencionou, a possibilidade de se bloquear de server2 , ou pior, inadvertidamente, modificar os arquivos errados em sua conta de trabalho.
Etapas para configurar o ssh para acesso remoto restrito
em server1
- Da conta em
server1 onde você executará o script, crie uma nova chave ssh que será usada apenas para executar o script remoto.
- Modifique a nova chave pública ssh para restringir a execução de apenas um comando (consulte
command= na sshd manpage).
- Faça um script de teste que imprima os IDs e a data do usuário.
Em server2 (tudo será feito remotamente de server1 )
- Crie uma nova conta em
server2 .
- Copie o arquivo de identidade público modificado para
.ssh/authorized_keys no diretório inicial do novo usuário em server2 .
- Copie o script de teste para o diretório inicial de novos usuários em
server2 .
- Verifique todas as permissões e propriedade em todos os arquivos na conta do novo usuário.
Código
Depois de salvar o script a seguir como ruser.sh on server1 e, depois de entender o que ele fará, execute este comando para executar:
$ sh ./ruser.sh ruser server2
Salve este script como ruser.sh na sua conta de usuário em system1 :
#!/bin/sh -e
#
# ruser.sh -- setup user on remote host for secure remote script execution
#
# This is for first time setup!
# Always use a new user on remote host.
#
USAGE="ERROR: Usage: sh $0 remote-username remote-hostname"
RUSER="${1:?$USAGE}"
RHOST="${2:?$USAGE}"
UNIQUE=$$
# build files that will be transferred to the remote host
# Make the new ssh key, and modify the public key so that
# it can only be used to execute "./rscript.sh"
ssh-keygen -N '' -f ~/.ssh/script_identity
sed -i '1 {
s,command="./rscript.sh",,
s,^,command="./rscript.sh" ,
}' ~/.ssh/script_identity.pub
# rscript.sh -- the only script that can be executed
# with the modified public key.
printf '%s' '(id;date) > rscript.out' > /tmp/rscript.sh.$$
# copy the new identity public key and rscript.sh to the remote host
scp ~/.ssh/script_identity.pub "${RHOST}":/tmp/script_identity.pub.${UNIQUE}
scp /tmp/rscript.${UNIQUE} "${RHOST}":/tmp/script_identity.pub.${UNIQUE}
# setup remote user for script execution
# Create new user
# Move identity file and script to new user's home directory.
# Fix ownership and permissions
ssh -t ${RHOST} "sudo /bin/sh -cex '
adduser --system --shell=/bin/sh ${RUSER};
mkdir -m0700 ~${RUSER}/.ssh;
mv /tmp/script_identity.pub.${UNIQUE} ~${RUSER}/.ssh/authorized_keys;
mv /tmp/rscript.sh.${UNIQUE} ~${RUSER}/rscript.sh
chmod -R 0600 ~${RUSER}/.ssh/;
chmod 0700 ~${RUSER}/.ssh/;
chmod 0700 ~${RUSER}/rscript.sh;
chown -R ${RUSER}:nogroup ~${RUSER}/;
'
"
# remove temp files
rm -rf /tmp/rscript.sh.${UNIQUE}
Teste a configuração acima em server1 executando:
$ ssh -i ~/.ssh/script_identity.pub ruser@server2
Em seguida, verifique o diretório inicial de ruser on server2 para ver se o arquivo rscript.out foi realmente criado, indicando que tudo está configurado corretamente.
Se sim, modifique o ruser@server2:rscript.sh para chamar seu /path/to/myscript . Antes de modificar o arquivo sudoers, emita o comando ssh novamente para executar o script remoto novamente para garantir que sua saída e saída de erro estejam funcionando da maneira desejada.
Agora configure o arquivo sudoers de server2 para permitir que esse novo usuário em server2 execute apenas um script como root sem uma senha.
ruser ALL = NOPASSWD: /path/to/myscript
Parabéns, agora você pode executar scripts com privilégios remotamente com segurança, sem ssh , sudo ou senhas do sistema.