Percorrer um arquivo de 200 linhas deve levar milissegundos, então duvido que seja isso.
Teste ssh -vvv tim@server
para ver o que está reduzindo a velocidade.
Seu shell padrão é salvo em /etc/passwd
no final da sua linha:
drjimbob:x:1000:1000:jim bob,,,:/home/drjimbob:/bin/bash
e pode ser alterado por chsh tim -s /bin/bash
(mudança de shell) embora você normalmente tenha que ter privilégios de root para alterar seu shell padrão , o que você pode fazer se tiver a senha de seu usuário precisa de permissão de root).
Note que /usr/bin/ssh-copy-id
é apenas um script e a linha que está causando problemas é:
{ eval "$GET_ID" ; } | ssh ${1%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1
Se você testar isso; com um script como test_script.sh
#!/bin/bash
umask 077; echo "Works fine"
$2
e execute-o como bash -v -x test_script.sh "ignored_first_parameter" "umask 077; echo 'no'"
Você verá que a tokenização bash (com base na variável de ambiente $IFS
) da variável "umask 077; echo no" no segundo parâmetro e, em seguida, a expansão do shell disse bash para executar o comando umask '077;'
que fornece o erro.
É basicamente devido ao fato de que digitar bash command1; command2
é fundamentalmente diferente de definir uma variável some_var='command1; command2"
e, em seguida, executar $some_var
.
Veja: link
EDIT: Para resolver suas dúvidas específicas;
(1) Eu ainda acho que esse método de controle de acesso é suspeito e possivelmente contornado por um dos truques padrão se um usuário tiver algum outro tipo de acesso. Digamos que eles tenham acesso ftp ao seu diretório de usuários; eles poderiam potencialmente fazer upload de um arquivo .login (contendo um falso $ PATH e um falso whoami) que permite que eles efetuem login.
No mínimo, o script deve especificar o caminho completo de whoami
(na minha máquina ubuntu seu /usr/bin/whoami
; pode variar em sistemas diferentes). Veja: Programação Segura para Linux Ch 5.2 .
Parece mais fácil desativar o shell para usuários que não conseguem fazer login (por exemplo, defina o shell como /bin/false
in /etc/passwd
para usuários que não estão na sua lista). Alternativamente (ou adicionalmente), se você estiver preocupado apenas com logins remotos, use uma configuração em /etc/ssh/sshd_config
para usar uma combinação de AllowUsers/AllowGroups
para whitelist users / groups ou DenyUsers/DenyGroups
para colocar usuários / grupos na lista negra em ssh (embora anotando que esses usuários poderiam fazer login se tivessem acesso físico à máquina).
No entanto, se o seu supervisor modificou seu script para usar eval $2
, ele deve corrigir os problemas imediatos com o ssh-copy-id. Veja Bash: por que usar eval com expansão de variáveis .
#!/bin/bash
USERNAME='whoami'
if ! grep ^$USERNAME$ /etc/domain-users > /dev/null; then
echo -e "You are not authorized to log into this server\n\n"
elif test -z "$2"; then
echo -e "User authorized"
/bin/bash
else #in case users are trying to send a command via ssh or use scp
eval $2
fi
Para as perguntas 2-5; as respostas, (2) sim, (3) sim, (4) não, (5) chsh tim -s /bin/bash
.