Haveria de qualquer maneira para saber o nome de usuário da conta de origem que ssh'ed no servidor?

3

Inicialmente git clonei um repo, quando eu empurro meu trabalho, dentro do gancho pós-recebimento, eu gostaria de recuperar o nome de usuário da conta de origem que fez o push.

Eu sei que $SSH_CONNECTION e $SSH_CLIENT me fornecem o IP de origem, mas não consigo encontrar uma maneira de obter o nome de usuário da conta de origem.

Info : A conexão ssh é estabelecida usando o método chave pública / sem senha

    
por Spredzy 22.12.2012 / 13:24

3 respostas

2

Estou assumindo que todos estão compartilhando o mesmo usuário no servidor git, e cada um deles tem sua própria chave para efetuar login.

Se for esse o caso, em vez de identificar o usuário remoto , você poderá identificar facilmente a chave pública que o usuário usou para efetuar login no servidor git. Para fazer isso, você deve permitir PermitUserEnvironment no sshd_config do seu servidor, e então você pode facilmente identificar cada chave pública prefixando-a com algo como environment="GIT_USER=username" . Por exemplo, o arquivo authorized_keys para o usuário do serviço git poderia ter esta aparência:

environment="GIT_USER=bob" ssh-rsa AAA.....abc== bob@somehost
environment="GIT_USER=sam" ssh-rsa AAA.....def== sam@otherhost

Você é livre para escolher o nome da variável de ambiente e o identificador de usuário.

Se você estiver usando gitolite , então $GL_USER é o que você está procurando.

Se você estiver usando gitosis , você deve considerar mudar para gitolite .

    
por 22.12.2012 / 19:21
1

Não, essa informação não está disponível de forma alguma, a menos que seu servidor git também possa acessar o host de origem (via ssh ou algo assim). Nesse caso, você pode usar o netstat em ambos os servidores para corresponder às portas, algo assim no gancho:

shost=$(echo $SSH_CONNECTION | cut -f1 -d' ')
sport=$(echo $SSH_CONNECTION | cut -f2 -d' ')
remotepid=$(ssh specialcheckuser@remote sudo netstat -ptn | sed -ne 's/.*$shost:$sport.*ESTABLISHED \([0-9]\+\).*//p')
remoteuser=$(ssh specliacheckuser@remote ps -o user --no-headers -$remotepid)
    
por 22.12.2012 / 13:51
1

Outra possibilidade, se você controlar ambos os hosts: good old identd. Você pode consultar o identd no host de origem para ver quem configurou a conexão. Isso, obviamente, só funciona se você tiver controle total sobre esse host, ou então poderá obter dados falsos.

    
por 22.12.2012 / 16:12