Alias com preenchimento automático (ou similar) no bash?

2

Eu tenho um host CentOS na minha rede local que uso diariamente para abrir conexões SSH para muitos (mais de 40) outros hosts na Internet e na rede local. Eu configurei os keypairs RSA para pular a autenticação interativa e alguns scripts bash como este:

[root@beta ~]# cat ~/connections/mywebsite.sh
ssh [email protected]

Isso funciona bem quando preciso abrir conexões para eles, mas não quando preciso de scp arquivos para o mesmo host.

É possível criar algo equivalente a um alias para substituir o nome de usuário @ host como este?

[root@beta ~]# scp myfile MYWEBSITE:/var/www

A possibilidade de autocompletar o alias com a tecla tab também seria incrível.

Eu entendo que aliases bash só podem ser usados como a primeira palavra do comando, mas existe alguma outra maneira de conseguir isso? Se não no bash, talvez outro shell?

    
por Kaivosukeltaja 23.09.2011 / 13:44

3 respostas

7

use os recursos incorporados em ssh, scp e rsync.

No subdiretório .ssh, crie um arquivo 'config'. (chmod 0600)

Com isso, você pode descrever os hosts e as opções a serem usadas para determinados hosts (ou opções globais).

Usando seu exemplo de: [email protected]

Digite o seguinte:

Host MYWEBSITE
  Hostname virtualserver123.hostingprovider.fi
  User mywebsitefi
  Port 22

deste ponto em diante, se você usar 'MYWEBSITE' como o nome do host, ele fornecerá automaticamente o nome do host real, nome de usuário, porta, opções, o que você especificar. (Eu especifico o número da porta por hábito)

Eu uso isso para especificar números de porta não padrão para meus servidores ssh voltados para a Internet /

Você pode digitar:

ssh MYWEBSITE

e as entradas no arquivo .ssh / config preencherão o url, o nome de usuário, a porta e as opções.

scp MYWEBSITE:/somepath/somefile /home/me/
rsync -vzP /some/files MYWEBSITE:/my/home/

trabalhe como você esperaria também.

Se você especificar vários nomes na linha Host, você poderá chamá-lo por qualquer um desses nomes, todos iguais.

recuo e capitalização são irrelevantes, mas eu gosto de dividir assim para maior clareza. coloque quantas entradas você precisar em seu .ssh / config

.ssh / config deve ter permissões de 0600 (usuário rw, nenhum para todos os outros), caso contrário o ssh irá reclamar e ignorar o arquivo.

Naturalmente, mais informações estão disponíveis nas páginas man ssh (1) e ssh_config (5).

Qualquer coisa colocada antes da primeira linha 'Host' é considerada uma opção global e é aplicada a todas as entradas que você define. Útil para especificar tempos limite de conexão, encaminhamento X11 e outros.

    
por 23.09.2011 / 14:43
3

Se você instalar o pacote bash-completion, ele adicionará autocompletar nomes de host e aliases ssh com base em informações que podem ser encontradas em vários locais, como .ssh / config, hosts conhecidos, etc.

    
por 23.09.2011 / 15:39
0

Se eu entendi sua pergunta, uma função de shell será suficiente: supondo que você queira codificar o usuário, o host e o caminho:

myscp () {
  scp "$@" user@host:path
}

use como

myscp *.html *.css
    
por 23.09.2011 / 14:16