Sunteți pe pagina 1din 61

Como Usar o Systemctl para Gerenciar

Servios do Systemd

O Systemd um gerenciador de sistema de inicializao que amplamente usado tornando-se o


novo padro para computadores com Linux. Embora existam opinies considerveis sobre se
systemd uma melhoria ao longo dos tradicionais sistemas de inicializao SysVinit, a maioria das
distribuies pretendemos adot-la ou j o fizeram.
Devido sua forte adoo, familiarizar-se com systemd vale bem a pena, pois ele vai tornar o
gerenciamento dos servios consideravelmente mais fcil. Conhecer e utilizar as ferramentas e
daemons que compem Systemd ir ajud-lo a apreciar melhor o poder, flexibilidade e capacidades
de que dispe, ou pelo menos ajud-lo a fazer o seu trabalho com o mnimo de confuso possvel.
Neste guia, vamos discutir o comando systemctl, que a ferramenta de gerenciamento central para
controlar o sistema de inicializao. Ns vamos cobrir como gerenciar servios, status de
verificao, os estados do sistema mudana, e trabalhar com os arquivos de configurao.

Gesto de Servios
O objetivo fundamental de um sistema de inicializao inicializar os componentes que devem ser
iniciados aps o kernel Linux ser inicializado (tradicionalmente conhecido como componentes
userland). O sistema de inicializao tambm usado para gerenciar servios e daemons para o
servidor a qualquer momento enquanto o sistema est em execuo. Com isso em mente, vamos
comear com algumas operaes de gerenciamento de servios simples.
No systemd, o alvo da maioria das aes so units (unidades), que so recursos que Systemd sabe
gerir. As unidades so classificadas pelo tipo de recurso que representam e so definidas com
arquivos conhecidos como arquivos de unidade. O tipo de cada unidade pode ser inferida a partir do
sufixo no fim do ficheiro.
Para tarefas de gerenciamento de servios, a unidade de destino ser unidades de servios, que tm
arquivos de unidades com um sufixo de .service. No entanto, na a maioria dos comandos de
gerenciamento de servios, voc pode realmente deixar de fora o sufixo .service, pois o systemd
inteligente o suficiente para saber que voc provavelmente vai querer operar em um servio ao usar
comandos de gerenciamento de servios.
Observe sua rvore de servios com o pstree.
Iniciar e parar servios
Para iniciar um servio do systemd, executando instrues no arquivo de unidade do servio, use o
prefixo start no comando. Se voc estiver executando como um usurio no-root, voc ter que
usar o sudo uma vez que este ir afetar o estado do sistema operacional:
sudo systemctl start application.service

Como mencionado acima, systemd sabe que procurar os arquivos *.service para os comandos de
gerenciamento de servios, portanto, o comando poderia facilmente ser digitado como este:
sudo systemctl start application

Embora voc possa usar o formato acima para administrao geral, para maior clareza, vamos usar
o sufixo.service para o restante dos comandos para ser explcito sobre o alvo estamos operando.
Para parar um servio em execuo, voc pode usar o comando prefixo stop no comando:
sudo systemctl stop application.service

Reiniciando e Recarregando
Para reiniciar um servio em execuo, voc pode usar o comando restart:
sudo systemctl restart application.service

Se a aplicao em questo capaz de recarregar seus arquivos de configurao (sem reiniciar), voc
pode usar o comando reload comando para iniciar esse processo:
sudo systemctl reload application.service

Se voc no tem certeza se o servio tem a funcionalidade para recarregar sua configurao, voc
pode usar o comando reload-or-restart. Isto ir recarregar a configurao no local, se disponvel.
Caso contrrio, ele ir reiniciar o servio para que a nova configurao tome efeito:
sudo systemctl reload-or-restart application.service

Como ativar e desativar servios


Os comandos acima so teis para iniciar ou parar comandos durante a sesso atual. Para dizer ao
systemd para iniciar os servios automaticamente no boot, voc deve habilit-los.
Para iniciar um servio no boot, utilize o comando enable:
sudo systemctl enable application.service

Isto ir criar um link simblico de cpia do sistema do arquivo de servio (normalmente em


/lib/systemd/system ou /etc/systemd/system) para o local no disco onde systemd procura por
arquivos de inicializao automtica (geralmente /etc/systemd/system/some_target.target.wants .
Mas vou passar o que um target mais adiante neste guia).
Para desativar o servio que iniciado automaticamente, voc pode usar o disable:
sudo systemctl disable application.service
Isto ir remover o link simblico que indica que o servio deve ser iniciado automaticamente.
Tenha em mente que habilitar um servio com o comando enable no ir inici-lo na sesso atual.
Se voc deseja iniciar o servio e habilit-lo no boot, voc ter que usar os comandos start e
enable.

Verificando o Status de Servios


Para verificar o status de um servio em seu sistema, voc pode usar o comando status:
systemctl status application.service

Isto ir fornecer-lhe com o estado do servio, a hierarquia cgroup, e as primeiras linhas de log.
Por exemplo, ao verificar o status de um servidor Nginx, voc poder ver uma sada como esta:
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor
preset: disabled)
Active: active (running) since Tue 2015-01-27 19:41:23 EST; 22h ago
Main PID: 495 (nginx)
CGroup: /system.slice/nginx.service
495 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid;
error_log stderr;
496 nginx: worker process

Jan 27 19:41:23 desktop systemd[1]: Starting A high performance web server and a
reverse proxy server...
Jan 27 19:41:23 desktop systemd[1]: Started A high performance web server and a
reverse proxy server.

Isso lhe d uma boa viso geral do status atual da aplicao, notificando-o de todos os problemas e
quaisquer aes que possam ser necessrias.
Existem tambm mtodos para a verificao de estados especficos. Por exemplo, para verificar se a
unidade est ativa (em execuo), voc pode usar o comando is-active:
systemctl is-active application.service

Isto ir lhe retornar o estado da unidade atual, que geralmente active ou inactive. O cdigo de
sada ser 0 se ele estiver ativo, tornando o resultado mais simples para analisar
programaticamente.
Para ver se a unidade for ativada, voc pode usar o comando is-enabled:
systemctl is-enabled application.service

A sada ser se o servio est enabled ou disabled e voltar a definir o cdigo de sada para 0 ou
1, dependendo da resposta pergunta do comando.
Uma terceira verificao se a unidade est em um estado de falha. Esta indicar se existe um
problema ao iniciar a unidade em questo:
systemctl is-failed application.service
Isso ir retornar active se estiver funcionando corretamente ou failed se ocorreu um erro. Se a
unidade foi intencionalmente parada, ele pode retornar unknow ou inactive. Um status de sada 0
indica que ocorreu uma falha e um status de sada 1 indica qualquer outro status.

Viso Geral do Status do Sistema


Os comandos at agora tm sido teis para o gerenciamento de servios individuais, mas eles no
so muito teis para explorar o estado atual do sistema. H uma srie de comandos systemctl que
fornecem essas informaes.

Listagem Unidades Atuais


Para ver uma lista de todas as unidades ativas que o Systemd conhece, podemos usar o
comando list-units:
systemctl list-units

Isto ir mostrar uma lista de todas as unidades que Systemd tem atualmente ativas no sistema. A
sada ser algo parecido com isto:
UNIT LOAD ACTIVE SUB DESCRIPTION
atd.service loaded active running ATD daemon
avahi-daemon.service loaded active running Avahi mDNS/DNS-
SD Stack
dbus.service loaded active running D-Bus System
Message Bus
dcron.service loaded active running Periodic Command
Scheduler
dkms.service loaded active exited Dynamic Kernel
Modules System
getty@tty1.service loaded active running Getty on tty1

. . .

A sada possui as seguintes colunas:


UNIT: O nome da unidade do systemd
LOAD: Se a configurao da unidade foi analisada pelo systemd. A configurao das
unidades carregadas so mantida na memria.
ACTIVE: Um resumo do estado se a unidade estiver ativa. Isso geralmente uma maneira
bastante bsica para mostrar se a unidade foi iniciado com xito ou no.
SUB: Este um estado de nvel inferior que indica informaes mais detalhadas sobre a
unidade. Isso muitas vezes varia por tipo de unidade, estado, e o mtodo real em que a
unidade funciona.
DESCRIPTION: Uma breve descrio textual do que a unidade /faz.

Uma vez que o comando list-units mostra apenas as unidades ativas, por padro, todas as entradas
acima iro mostrar loaded na LOAD e active na coluna ACTIVE. Esta exposio , na verdade,
o comportamento padro do systemctl quando chamado sem comandos adicionais, ento voc vai
ver a mesma coisa se voc chamar systemctl sem argumentos:
systemctl
Podemos dizer systemctl trs informaes de sadas diferentes, adicionando flags adicionais. Por
exemplo, para ver todas as unidades que Systemd carregou (ou tentou carregar), independentemente
de se eles esto ativos, voc pode usar a flag all, como neste exemplo:
systemctl list-units --all

Isto ir mostrar qualquer unidade que Systemd carregou ou tentou carregar, independentemente do
seu estado atual no sistema. Algumas unidades se tornam inativas aps a execuo, e algumas
unidades que Systemd tentou carregar e pode por no ter sido encontrada no disco.

Voc pode usar outras flags para filtrar esses resultados. Por exemplo, podemos usar o state
= para indicar os estados LOAD, ativos ou SUB que desejar ver. Voc ter que manter o
sinalizador all para que o systemctl permita que as unidades no ativas sejam exibidas:
systemctl list-units --all --state=inactive

Outro filtro comum o filtro type=. Podemos dizer ao systemctl para mostrar somente unidades
do tipo que estamos interessados em ver. Por exemplo, para ver apenas as unidades do servio
ativas, ns podemos usar:
systemctl list-units --type=service

Listando Todos os Arquivos da Unidade


O comando list-units exibe apenas unidades que Systemd tentou analisar e carregar na memria.
Ento, o systemd s vai ler unidades que acha que precisa, e isso no vai necessariamente incluir
todas as unidades disponveis no sistema. Para ver todos os arquivo de unidade disponveis dentro
dos caminhos de pasta do Systemd, incluindo aqueles que systemd no tentou carregar, voc pode
usar o comando list-units-files:
systemctl list-units-files

Unidades so representaes de recursos que o Systemd conhece. O systemd no necessariamente l


todas as definies de unidade neste ponto de vista, s apresenta informaes sobre os prprios
arquivos. A sada tem duas colunas: o arquivo de unidade e o estado.
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount static
var-lib-nfs-rpc_pipefs.mount static
org.cups.cupsd.path enabled

. . .

O estado geralmente ser enabled, disabled, static, ou masked. Neste contexto,


static significa que o arquivo unidade no contm uma seo install, que usado para
ativar uma unidade. Como tal, estas unidades no podem ser ativadas. Geralmente, isto
significa que a unidade efetua uma ao de uma nica vez ou utilizado apenas como uma
dependncia de outra unidade e no deve ser administrada por si s. E vamos dizer que o
masked significa momentaneamente.

Gesto de unidade
At agora, temos trabalhado com os servios e exibido informaes sobre os arquivos e unidades
que o Systemd conhece. No entanto, podemos encontrar informaes mais especficas sobre as
unidades que usam alguns comandos adicionais.

Exibindo Um Arquivo Unit


Para exibir que o arquivo de unidade do systemd foi carregado no seu sistema, voc pode usar o
comando cat (este foi adicionado em systemd verso 209). Por exemplo, para ver o arquivo unidade
do daemon atd , poderamos escrever:
systemctl cat atd.service

[Unit]
Description=ATD daemon

[Service]
Type=forking
ExecStart=/usr/bin/atd

[Install]
WantedBy=multi-user.target

A sada o arquivo de unidade como conhecido na atualmente na execuo do processo


do systemd. Isso pode ser importante se voc tiver modificado arquivos da unidade recentemente ou
se voc est substituindo determinadas opes em um fragmento de arquivo da unidade (ns
iremos cobrir isso mais tarde).

Exibindo Dependncias
Para ver rvore de dependncias de uma unidade, voc pode usar o comando list-dependencies:
systemctl list-dependencies sshd.service

Isto ir exibir uma hierarquia mapeando as dependncias que devem ser tratadas com a fim de
iniciar a unidade em questo. Dependncias, neste contexto, incluem as unidades que so ou
necessrias ou requeridas pelas unidades acima dela.
sshd.service
system.slice
basic.target
microcode.service
rhel-autorelabel-mark.service
rhel-autorelabel.service
rhel-configure.service
rhel-dmesg.service
rhel-loadmodules.service
paths.target
slices.target

. . .

As dependncias recursivas so exibidas apenas por unidades .TARGET, que indicam estados do
sistema. Para listar recursivamente todas as dependncias, inclua a flag all.
Para mostrar dependncias reversas (unidades que dependem da unidade especificada), voc pode
adicionar o sinalizador reverse ao comando. Outras opes que so teis so os before e after,
que podem ser usadas para mostrar unidades que dependem da unidade especificada, comeando
antes e depois dela, respectivamente.

Verificao das Propriedades da Unidade


Para ver as propriedades de baixo nvel de uma unidade, voc pode usar o programa de comando.
Isto ir exibir uma lista de propriedades que esto definidas para a unidade especificada usando um
formato chave=valor:
systemctl show sshd.service

Id=sshd.service
Names=sshd.service
Requires=basic.target
Wants=system.slice
WantedBy=multi-user.target
Conflicts=shutdown.target
Before=shutdown.target multi-user.target
After=syslog.target network.target auditd.service systemd-journald.socket
basic.target system.slice
Description=OpenSSH server daemon

. . .

Se voc quiser exibir uma nica propriedade, voc pode usar a flag -p com o nome da propriedade.
Por exemplo, para ver os conflitos que a unidade sshd.service tem, voc pode digitar:
systemctl show sshd.service -p Conflicts

Conflicts=shutdown.target

Mascaramento e Desmascarando Unidades


Vimos na seo de gerenciamento de servios como parar ou desativar um servio, mas
o systemd tambm tem a capacidade de marcar uma unidade como completamente no-inicivel,
automaticamente ou manualmente, ligando-a /dev/null. Isto chamado de mascaramento da
unidade, e possvel com o comando mask:
sudo systemctl mask nginx.service

Isso ir impedir que o servio Nginx seja iniciado, manual ou automaticamente, durante o tempo
que ele mascarado.
Se voc verificar as list-unit-files, voc vai ver o servio agora est listado como mascarado:
systemctl list-unit-files
. . .

kmod-static-nodes.service static
ldconfig.service static
mandb.service static
messagebus.service static
nginx.service masked
quotaon.service static
rc-local.service static
rdisc.service disabled
rescue.service static

. . .

Se voc tentar iniciar o servio, voc ver uma mensagem como esta:
sudo systemctl start nginx.service

Failed to start nginx.service: Unit nginx.service is masked.

Para desmascarar uma unidade, tornando-a disponvel para uso novamente, basta usar o comando
unmask:
sudo systemctl unmask nginx.service

Isso ir retornar a unidade ao seu estado anterior, permitindo-lhe ser habilitada.

Editando Arquivos das Unidades


Enquanto o formato especfico para arquivos de unidade est fora do escopo deste tutorial,
o systemctl fornece mecanismos integrados para editar e modificar os arquivos da unidade se voc
precisar fazer ajustes. Esta funcionalidade foi adicionada no systemd verso 218.
O comando edit, por padro, ir abrir para edio a unidade em questo:
sudo systemctl edit nginx.service

Este ser um arquivo em branco que pode ser usado para substituir ou adicionar diretrizes para a
definio da unidade. Um diretrio ser criado dentro da etc/systemd/system/ que ir conter o nome
da unidade com o sufixo .d. Por exemplo, para o nginx.service , um diretrio chamado
nginx.service.d ser criado.
Dentro deste diretrio, um arquivo ser criado chamado override.conf. Quando a unidade for
carregada, o systemd vai, na memria, mesclar o arquico de substituio com o arquivo unidade
completo. Diretivas do arquivo de configurao override.conf ter precedncia sobre os encontrados
no arquivo unidade original.
Se voc deseja editar o arquivo unidade completamente, em vez de criar um arquivo de override,
voc pode usar a flag full:
sudo systemctl edit --full nginx.service

Isto ir carregar o arquivo de unidade atual para o editor, onde ele poder ser modificado. Ao sair do
editor, o arquivo alterado ser gravado em /etc/systemd/system, que ter precedncia sobre
definio de unidade do sistema (geralmente encontrado em /lib/systemd/system).
Para remover todas as adies que voc tenha feito, exclua o diretrio de configurao da
unidade .d ou o arquivo de servio modificado a partir de /etc/systemd/system. Por exemplo:
sudo rm -r /etc/systemd/system/nginx.service.d

Para remover completamente um arquivo de unidade modificada, use:


sudo rm /etc/systemd/system/nginx.service

Depois de excluir o arquivo ou pasta, voc deve recarregar o processo do systemd para que ele no
tente fazer referncia a esses arquivos e reverter usando cpias do sistema. Voc pode fazer isso
digitando:
sudo systemctl daemon-reload

Ajustando o Estado do Sistema (Nvel de Execuo) com


Targets
Os targets so arquivos de unidade especiais que descrevem um ponto do estado ou sincronizao.
Como outras unidades, os arquivos que definem os targets podem ser identificados por seu sufixo,
que neste caso o .TARGET. Targets no fazem muito a si mesmos, mas so usados para agrupar
unidades em conjunto.
Isto pode ser utilizado, a fim de levar o sistema para certos estados, assim como outros sistemas de
inicializao como o init usam nveis de execuo (runlevel). Eles so usados como referncia para
quando certas funes esto disponveis, permitindo que voc especifique o estado desejado, em
vez de unidades individuais necessrias para produzir esse estado.
Por exemplo, h um swap.target que usado para indicar que o swap est pronto para uso.
Unidades que fazem parte deste processo pode sincronizar com este target, indicando na sua
configurao que eles so WantedBy= ou RequiredBy= (Necessrios ou requeridos) para que
funcione o swap.target. Unidades que requerem o swap podem especificar esta condio usando
os WantedBy= ou RequiredBy=, e especificaes do After= para indicar a natureza de seu
relacionamento.

Obtendo e Definindo o Target Padro


O processo do systemd tem um destino padro que ele usa durante a inicializao do sistema.
Satisfazendo a cascata de dependncias a partir desse nico target vai trazer o sistema para o estado
desejado. Para encontrar o destino padro para o seu sistema, digite:
systemctl get-default

multi-user.target

Se voc deseja definir um target padro diferente, voc pode usar o set-default. Por exemplo, se
voc instalou um ambiente grfico desktop e voc deseja que o sistema inicialize-o por padro, voc
pode mudar seu target padro:
sudo systemctl set-default graphical.target
Listando Targets Disponveis
Voc pode obter uma lista dos targets disponveis no seu sistema digitando:
systemctl list-units-files --type=target

Ao contrrio de nveis de execuo, alvos mltiplos podem estar ativos ao mesmo tempo. Um alvo
ativo indica que systemd tentou comear a todas as unidades ligadas ao alvo e no tentou derrub-
las novamente. Para ver todos os alvos ativos, digite:
systemctl list-units --type=target

Isolando Targets
possvel iniciar todas as unidades associadas com um alvo e parar todas as unidades que no so
parte da rvore de dependncia. O comando que ns precisamos de fazer isso chamado,
apropriadamente, isolate. Isto semelhante mudar o runlevel (nvel de execuo) em outros
sistemas de inicializao.
Por exemplo, se voc estiver operando em um ambiente grfico com graphical.target ativo, voc
pode desligar o sistema grfico e colocar o sistema em um estado de linha de comando multi-user,
isolando o multi-user.target. Como o graphical.target depende do multi-user.target, (mas no o
contrrio), todas as unidades grficas sero interrompidas.
Voc pode querer dar uma olhada nas dependncias do alvo que voc est isolando antes de realizar
este procedimento para garantir que voc no est parando servios vitais:
systemctl list-dependencies multi-user.target

Quando estiver satisfeito com as unidades que sero mantidas ativas, voc pode isolar o alvo
digitando:
sudo systemctl isolate multi-user.target

Usando Atalhos Para Eventos Importantes


H targets definidos para eventos importantes como desligar ou reiniciar. No entanto,
o systemctl tambm tem alguns atalhos que adicionam um pouco de funcionalidades adicionais.
Por exemplo, para colocar o sistema no modo de recuperao (de um nico usurio), voc pode
simplesmente usar o comando rescue em vez do isolate rescue.target:
sudo systemctl rescue

Isto ir fornecer a funcionalidade adicional de alertar todos os usurios logados sobre o evento.
Para parar o sistema, voc pode usar o comando halt:
sudo systemctl halt

Para iniciar um desligamento completo, voc pode usar o comando poweroff:


sudo systemctl poweroff
Uma reinicializao pode ser iniciada com o comando reboot:
sudo systemctl reboot

Todos estes comandos alertam os usurios logados que o evento est ocorrendo, algo que
simplesmente executando ou isolando o target no iria fazer. Note que na maioria das mquinas que
usam systemd, os comandos mais curtos, so abreviaes dos comandos do systemd, para estas
operaes e funcionam corretamente tambm.
Por exemplo, para reiniciar o sistema, normalmente voc pode digitar:
sudo reboot

Concluso
At agora, voc deve estar familiarizado com alguns dos recursos bsicos dos comandos
do systemctl que lhe permitem interagir com e controlar o seu systemd. O utilitrio systemctl ser o
seu principal ponto de interao para gerenciamento de servios e status do sistema.
O systemctl opera principalmente com o processo principal systemd, mas existem outros
componentes do ecossistema do systemd que so controladas por outros utilitrios.
Outros recursos, como sesses de gerenciamento de log e de usurio so manipulados por daemons
separados e utilitrios de gerenciamento (journald/journalctl e logind/loginctl respectivamente).
Dedicar tempo para se familiarizar com esses outros instrumentos e daemons faro a gesto do
sistema uma tarefa mais fcil.
Para saber mais sobre o jounalctl por exemplo, veja este outro artigo abaixo.
Como Analisar os Logs Usando o Journalctl

Todo administrador tem como rotina checar os


servios de um servidor atrs de problemas e ento
realizar medidas para corrigir os problemas.
Algumas distribuies Linux usam o Rsyslog como
sistema de log, e outras o Journalctl. As que usam o
Systemd ao invs do init ou outro similar, trazem o
utilitrio Journalctl. E existe uma mudana ocorrendo
que tem tornado o Systemd padro para a maioria das
distribuies e por isso trar o Journalctl junto.
Em trs outros artigo recentes, eu mostro porque isso
acontece e qual a vantagem de se usar o systemd e o journalctl.
Init-vs-Systemd
Porque-o-journalctl-e-bacana-e-porque-o-rsyslog-vai-sobreviver-por-mais-uma-decada
Como-analisar-os-logs-usando-o-journalctl

Bom, ento sabemos que o Journalctl um utilitrio do systemd. E ele usado para consultar e
exibir mensagens do journal. Uma vez que o journal composto por um ou mais arquivos binrios,
journalctl a maneira padro para ler mensagens a partir dele.
Nos pargrafos seguintes, vamos ver como journalctl pode ser usado com alguns dos seus
parmetros. Cada parmetro pode ser usado sozinho ou combinado com outros parmetros para
estreitar ainda mais o mbito da pesquisa.
Quando executado sem parmetros, o comando a seguir ir mostrar todas as entradas do journal,
que pode ser bastante longa:
journalctl
As entradas comearo com uma flag semelhante a esta que mostra o perodo de tempo abrangido
pelo log:
-- Logs begin at Thu 2015-06-25 00:34:38 EDT, end at Sun 2015-06-28 20:30:55
EDT. --

O journalctl vai parar depois de exibir cada tela de mensagens, e voc pode pressionar PgDn ou
barra de espao para ver a prxima tela cheia. Para parar a qualquer momento, pressione q. Isso
funciona como o comando less padro em Linux. Entradas longas so mostradas conforme largura
da tela e truncado com off no final, se eles no se encaixam. A poro de corte pode ser vista usando
as teclas de seta esquerda e direita.
Para obter uma lista completa de opes de journalctl, voc pode visitar a pgina de manual
do journalctl.

Mensagens de inicializao
Para ver mensagens relacionadas com o arranque da boot atual, use a opo -b:
journalctl -b

Para ver mensagens da ltima inicializao, use o modificador -1; para ver as mensagens de
inicializao a partir de duas botas atrs, usar -2; e assim por diante. No exemplo abaixo, vamos ver
mensagens do ltimo boot e no do atual:
journalctl -b -1

Para listar os boots do sistema, use o seguinte comando:


journalctl --list-boots

Ele ir mostrar um resultado tabulado como este:


-1 ad5756178e5040d093cd74162d38000f Thu 2015-06-25 00:34:38 EDT-Sat 2015-06-27
21:41:27 EDT
0 7fd49ca34fcf44c59806b2b6f240ae16 Sat 2015-06-27 21:41:30 EDT-Sun 2015-06-28
21:10:00 EDT

O primeiro campo o nmero de inicializao (0 sendo o mais recente de inicializao, sendo o


boot -1 antes dessa, e assim por diante), seguido por um ID de inicializao (um nmero
hexadecimal longo), seguido pelos timestamp (registro da data e hora), da primeira e da ltima
mensagem relacionadas a esse boot.

Intervalos de Tempo
Para ver mensagens registradas dentro de uma janela de tempo especfico, podemos usar o since e
o until. O comando a seguir mostra mensagens do journal registrados na ltima hora:
journalctl --since "1 hour ago"

Para ver mensagens registradas nos ltimos dois dias, o seguinte comando pode ser usado:
journalctl --since "2 days ago"
O comando a seguir mostrar mensagens entre duas datas e horrios. Todas as mensagens
registradas desde (since) a data e hora definida e at (until) a data e hora definida:
journalctl --since "2015-06-26 23:15:00" --until "2015-06-26 23:20:00"

Note que a data e hora precisa ser especificada no formato: AAAA-MM-DD HH: MM: SS (Ano,
ms, dia, hora, minuto, e segundo).

Por Unidade
Para ver mensagens registradas por qualquer unidade systemd, use a opo -u. No exemplo abaixo,
o comando ir mostrar todas as mensagens registradas pelo servidor web usando o programa nginx.
Voc pode usar o since e until e at interruptores aqui para identificar erros no servidor web que
ocorreram dentro de uma janela de tempo:
journalctl -u nginx.service

A opo -u pode ser usado vrias vezes para especificar mais de uma fonte de unidade. Por
exemplo, se voc quiser ver entradas para o nginx e mysql, o seguinte comando pode ser usado:
journalctl -u nginx.service -u mysql.service

Follow ou Tail
Para executar journalctl como o comando tail Linux para que ele mostre continuamente mensagens
de log, use a opo -f:
journalctl -f

O prximo comando seguir o daemon do mysql:


journalctl -u mysql.service -f

Para parar de seguir e retornar ao prompt, pressione Ctrl+C.


Usando a opo -n ir mostrar o nmero especificado dos lanamentos recentes. No comando a
seguir, estamos exibindo as ltimas 50 mensagens registradas na ltima hora:
journalctl -n 50 --since "1 hour ago"

O parmetro -r mostra entradas de dirio em ordem cronolgica inversa para que as mensagens
mais recentes sejam exibidas. O comando abaixo mostra as ltimas 10 mensagens do daemon sshd,
listadas em ordem inversa:
journalctl -u sshd.service -r -n 1

Formatos de Sada
O parmetro -o nos permite formatar a sada de consulta journalctl. O -o (ou -output se estamos
usando o nome longo) pode nos trazer alguns valores:
json ir mostrar cada entrada de dirio no formato JSON em uma linha longa.
json-pretty ir mostrar cada entrada de log no formato JSON fcil de ler.
verbose mostrar informao muito detalhada para cada registro do journal com todos os campos
listados.
cat mostra as mensagens em forma muito curta, sem quaisquer nomes de servidor data/hora ou de
origem.
short o formato de sada padro: Mostra mensagens no estilo syslog.
short-monotonic semelhante ao short, mas o segundo valor contm o timestamp que mostrado
com preciso. Isso pode ser til quando voc est olhando para mensagens de erro gerados a partir
de mais de uma fonte que, aparentemente, est jogando mensagens de erro, ao mesmo tempo e voc
quer ir para o level. O comando de filtragem seguinte mostra ltima sada em formato JSON-
pretty:
journalctl -u sshd.service -r -n 10 -o json-pretty.

A sada pode se parecer como isso:

{
__CURSOR :
1
s=bf93c444c3a2499095953159a3cba8c2;i=40c14;b=fbde6d3112084cd097c250aee3bab030;
2
m=4f30cd3897;t=5199f269b9024;x=a424fc0dd9da81c4,
3
__REALTIME_TIMESTAMP : 1435546221776932,
4
__MONOTONIC_TIMESTAMP : 340121172119,
5
_BOOT_ID : fbde6d3112084cd097c250aee3bab030,
6
_TRANSPORT : syslog,
7
PRIORITY : 6,
8
SYSLOG_FACILITY : 10, SYSLOG_IDENTIFIER : sshd,
9
MESSAGE : pam_succeed_if(sshd:auth): requirement uid >= 1000 not met by user
10
root,
11
_UID : 0,
12
_GID : 0,
13
_COMM : sshd,
14
_EXE : /usr/sbin/sshd,
15
_CMDLINE : sshd: root [priv] ,
16
_CAP_EFFECTIVE : 1fffffffff, _SYSTEMD_CGROUP : /system.slice/sshd.service,
17
_SYSTEMD_UNIT : sshd.service,
18
_SYSTEMD_SLICE : system.slice,
19
_MACHINE_ID : fd8cf26e06e411e4a9d004010897bd01,
20
_HOSTNAME : test-centos7,
21
SYSLOG_PID : 32724,
22
_PID : 32724,
23
_SOURCE_REALTIME_TIMESTAMP : 1435546221776510
}

Por Prioridade
Use a opo -p para filtrar mensagens com base em um nvel de prioridade. Para ver quais nveis de
prioridade esto disponveis, consulte a seo sobre parmetros de configurao Systemd-journald
e os possveis valores de parmetros MaxLevelStore. Se um nico nvel de prioridade for
especificado, todas as mensagens com esse nvel de prioridade e abaixo dela sero exibidos. Para
usar uma gama de nveis de prioridade, use o FROMTO. Como um exemplo, o comando
abaixo mostrar todas as mensagens com prioridade entre emergncia e crtico do ltimo boot:
journalctl -b -1 -p "crit"

Por Usurio
Para localizar todas as mensagens relacionadas a um usurio especfico, use o UID do usurio. No
exemplo a seguir, ns estamos encontrando o UID do usurio mysql:
id mysql

Isso retorna uma linha como esta:


uid=108(mysql) gid=116(mysql) groups=116(mysql)

E ento ns iremos consultar no journal todas as mensagens registradas por esse usurio:
journalctl _UID=108

A sada seria assim:

Logs begin at Thu 20150625 00:34:38 EDT, end at Sun 20150628 23:16:08 EDT.
Jun 25 00:53:21 testubuntu15 mysqld_safe[11177]: 150625 00:53:21 mysqld_safe Cant log
to error log and syslog at the same time. Remove all log-error configuration options for
syslog to take effect.
Jun 25 00:53:21 test-ubuntu15 mysqld_safe[11177]: 150625 00:53:21 mysqld_safe Logging
1 to /var/log/mysql/error.log.
2 Jun 25 00:53:21 test-ubuntu15 mysqld_safe[11177]: 150625 00:53:21 mysqld_safe Starting
3 mysqld daemon with databases from /var/lib/mysql
4 Jun 27 21:41:26 test-ubuntu15 mysqld_safe[11177]: Could not open required defaults file:
5 /etc/mysql/debian.cnf
6 Jun 27 21:41:26 test-ubuntu15 mysqld_safe[11177]: Fatal error in defaults handling. Program
7 aborted
8 Jun 27 21:41:26 test-ubuntu15 mysqld_safe[11177]: 150627 21:41:26 mysqld_safe mysqld
9 from pid file /var/run/mysqld/mysqld.pid ended
10 <b> Reboot </b>
11 Jun 27 21:41:33 test-ubuntu15 mysqld_safe[561]: 150627 21:41:33 mysqld_safe Cant log to
12 error log and syslog at the same time. Remove all logerror configuration options for
syslog to take effect.
Jun 27 21:41:33 testubuntu15 mysqld_safe[561]: 150627 21:41:33 mysqld_safe Logging to
/var/log/mysql/error.log.
Jun 27 21:41:33 testubuntu15 mysqld_safe[561]: 150627 21:41:33 mysqld_safe Starting
mysqld daemon with databases from /var/lib/mysql
Bom pessoal, como falei no comeo do artigo, para maiores informaes consulte a pgina de
manual do jounalctl.
Ferramentas Visuais
Se voc estiver usando distros como o SUSE Enterprise ou o openSUSE por exemplo, poder
tambm checar os registros do journal usando o mdulo do Yast chamado journal-systemd, ou
Entradas do Dirio, conforme imagem abaixo.
Obs. O painel de controle Yast tambm funciona em modo texto no terminal. Ento poderia ser
usado mesmo se voc no possuir ambiente desktop instalado no SUSE/openSUSE.
Voc poder alterar o filtro que desejar usando o boto Mudar Filtro no canto inferior
esquerdo, e repare que quase todas as opes que citamos neste artigo, ou seja, o desde e at (since
e until), desde o ltimo boot, ou boot anterior, por unidade, por comando ou executveis, e por
prioridade (com uma combo-box para voc definir a prioridade), so exibidas na ferramenta.
Gnome-logs
Existe tambm uma ferramenta do Gnome, (que no vem instalada por padro, mas voc poder
instal-la usando o seu gerenciador de pacotes), chamada gnome-logs que mostra para voc
mensagens do seu journal e lhe permite pesquisar por elas. Mas esta no to completa, pois no
lhe permite realizar filtragens, apenas possui algumas categorias. Com certeza o mdulo do Yast
bem mais completo que esta, mas talvez possa ser til para voc.
Concluso
Bom, realmente o journalctl bem legal com seus diversos filtros e a possibilidade de podermos
combin-los. Usando-o no terminal existem muito mais opes de filtros que podemos combinar.
A maioria das Distribuies Linux esto usando ou migrando para o systemd, e por isso o journalctl,
ento creio que uma boa ideia nos acostumarmos a analisarmos os logs nesta ferramenta.
Porque o Journalctl Bacana e Porque o
Syslog Vai Sobreviver Por Mais Uma Dcada
Sobre o Journalctl no Systemd
O Systemd usa o Journalctl, que o utilitrio para analisar registros do Systemd. Ento muitas
pessoas comearam a se adaptar ao uso do Journalctl para analisar os logs.
Obs. Saiba mais sobre as diferenas entre o init e o Systemd.
Bem, h prs e contras sobre este tipo de registro. Para administradores de sistema, o journalctl
uma ferramenta poderosa que simplifica a busca de entradas no arquivo de log.
Por outro lado, eu procurei e ainda no encontrei nenhuma ferramenta de monitoramento (por
enquanto) que trabalhe com journalctl, portanto os logs ainda devem ser analisados usando
comandos de filtragem desejados e existe at uma ferramenta com interface grfica do Gnome que
mostra e filtra as mensagens do Journalctl chamada gnome-logs, mas nesse artigo mostrarei
apenas algumas formas de usar o journalctl via comandos no terminal.

Por que o Journalctl torna a vida mais fcil?


No syslog para filtrar logs, voc precisaria fazer muitos grep em muitas linhas do
arquivo /var/log/messages, e no journalctl voc simplesmente pode filtrar as mensagens e trabalhar
nelas.
(Vou citar alguns exemplos abaixo, mas no artigo mostrarei como usar melhor o Journalctl).
O journalctl tem preenchimento automtico ( s apertar a tecla tab) mostrando-lhe as opes para
usar.
journalctl < TAB >
_AUDIT_LOGINUID= __MONOTONIC_TIMESTAMP=
_AUDIT_SESSION= _PID=
_BOOT_ID= PRIORITY=
_CMDLINE= __REALTIME_TIMESTAMP=
CODE_FILE= _SELINUX_CONTEXT=
CODE_FUNC= _SOURCE_REALTIME_TIMESTAMP=
CODE_LINE= SYSLOG_FACILITY=
_COMM= SYSLOG_IDENTIFIER=
COREDUMP_EXE= SYSLOG_PID=
__CURSOR= _SYSTEMD_CGROUP=
ERRNO= _SYSTEMD_OWNER_UID=
_EXE= _SYSTEMD_SESSION=
_GID= _SYSTEMD_UNIT=
_HOSTNAME= _TRANSPORT=
_KERNEL_DEVICE= _UDEV_DEVLINK=
_KERNEL_SUBSYSTEM= _UDEV_DEVNODE=
_MACHINE_ID= _UDEV_SYSNAME=
MESSAGE= _UID=
MESSAGE_ID=

Como voc viu, existem muitas opes de filtragem disponveis aqui. A maioria destas opes so
auto-explicativas.
Se voc quiser apenas para ver as entradas feitas por um comando em particular, digite journalctl
_COMM= e ento a tecla TAB, conforme abaixo.
#journalctl _COMM =
abrtd dnsmasq mtp-sonda tgtd sh
anacron rede gnome-keyring-d smartd udisksd
avahi-daemon hddtemp polkit-agente de ele smbd umount
festana journal2gelf polkitd sshd userhelper
blueman-mechani kdumpctl pulseaudio sssd_be yum
chronyd krb5_child qemu-system-x86 su
colord libvirtd sealert sudo
logger crond systemd sendmail
dbus-daemon mcelog setroubleshootd systemd-journal

Se voc digitar journalctl _COMM= sshd voc s vai ver as mensagens criadas por sshd.
# journalctl _COMM= sshd

-- Logs begin at Tue 2013-07-23 08:46:28 CEST, end at Wed 2013-07-24 11:10:01
CEST. --
Jul 23 09:48:45 fedora.example.com sshd[2172]: Server listening on 0.0.0.0 port
22.
Jul 23 09:48:45 fedora.example.com sshd[2172]: Server listening on :: port 22.

Normalmente queremos filtrar mensagens dentro de um intervalo de tempo especfico.


journalctl _COMM = crond --since "10:00" --until "11:00"
- Logs comeam em Tue 2013/07/23 08:46:28 CEST, terminam na quarta-feira
2013/07/24 11:23:25 CEST. -
24 de julho 10:20:01 fedora.example.com crond [28305]: (root) CMD (/ usr /
lib64 / sa / sa1 1 1)
24 de julho 10:50:01 fedora.example.com crond [28684]: (root) CMD (/ usr /
lib64 / sa / sa1 1 1)

E Por qu o Rsyslog Vai Durar Mais Uma Dcada Ou At Mais?


H uma grande quantidade de ferramentas e scripts que esto em vigor h muito tempo, alguns
deles at mesmo vieram de um tempo antes de Linux nascer.
A maioria desses scripts devem ser reescritos ou pelo menos mudar o seu comportamento. Ou seja,
tendo a entrada de STDIN ao invs de um arquivo de log, por isso, essas ferramentas podem atrasar
bastante a transio geral para o Journalctl, e parece que o syslogd vai mesmo sobreviver at o
ltimo desses sistemas ser encerrado.
Quer saber mais sobre como usar o Journalctl? Leia o artigo abaixo:
Como Analisar Logs com o Journalctl

D para usar os dois juntos?


Sim! O journal do systemd pode ser usado com uma j existente aplicao syslog, ou pode
substituir a funcionalidade do syslog dependendo de suas necessidades. Enquanto o journal
do systemd vai cobrir as necessidades de registro de administradores, ele tambm pode
complementar os mecanismos de registro existentes. Por exemplo, voc pode ter em um servidor o
sistema centralizado syslog que voc usa para compilar dados de mltiplos servidores, mas voc
tambm pode querer intercalar os logs de mltiplos servios em um nico sistema com o
journal systemd. Voc pode fazer ambos ao combinar essas tecnologias.
O SUSE Enterprise e openSUSE por exemplo usam o systemd e o Journalctl para colher logs, mas
voc pode instalar o rsyslog tambm para colher logs. Claro que os dois juntos iro consumir mais
processamento e voc ter dados redundantes, mas se voc deseja isso para uma utilizao
especfica como nos exemplos citados no pargrafo anterior, ento pode ser til para voc.
Agendando a Limpeza de Arquivos Mais
Antigos Que X Dias no Linux

Surgiu h algum tempo a necessidade de eu agendar via Cron a execuo de um comando ou script
que apagasse em determinada pasta, arquivos mais antigos que 2 meses, ento fiz o script, agendei
no cron e s hoje resolvi compartilhar o mtodo que usei aqui no site.
Com isso automatizado, a cada 2 meses, ele rodar sozinho um comando que apagar arquivos mais
velhos que 2 meses na pasta especificada. Muito legal no ?!
Isso pode ser usado para criar uma simples rotina automtica de limpeza em seu Desktop, bem
como em servidores, nos arquivos que foram feitos backup.
Obs. Voc pode ter usado algum sistema ou comando para realizar backup, (como os que eu j
mostrei usando o sistema de Backup Bacula, ou programa Rsync ou usando compactao com tar e
gz).
Enfim, pode ser usado para limpar qualquer contedo de pasta. Neste caso aqui, selecionando
arquivos mais antigos que o nmero de dias que voc determinar. (Por isso perfeito para arquivos
de backup, pois provavelmente voc desejar manter os arquivos mais recentes enquanto ele ir
aparar os mais antigos automaticamente).
A sintaxe do comando a seguinte.
find /pasta/dos/seus/arquivos/* -mtime +60 -exec rm {} \;

Note que h espaos entre rm, {}, and \;


Explicao
O primeiro argumento o caminho dos arquivos. Isto pode ser o caminho de um diretrio, e
pode conter um wildcard como no exemplo acima no qual usamos o smbolo *. Eu
recomendo o uso do caminho completo do diretrio.
O segundo argumento o -mtime, que usado para especificar o nmero de dias mais
velhos que o nmero especificado . Se voc usou o +60, ele ir encontrar os arquivos mais
antigos que 60 dias.
O terceiro argumento, -exec, lhe permitir executar um comando como o rm. O {} \; no
final da linha requerido para terminar o comando.
Funciona no Ubuntu, Suse, Redhat, e em muitas outras Distribuies Linux.

Criando um Script e Agendando no Cron.


Por exemplo, para apagar o contedo de sua pasta de Downloads mais antigos que 1 ms.
Voc pode criar um arquivo de shell script com o seguinte contedo.
#! /bin/bash
find /home/seu-user/Downloads/* -mtime +60 -exec rm {} \;

Salve o arquivo com um nome por exemplo apaga-arquivos-velhos.sh


D permisso de execuo no script:
chmod +x apaga-arquivos-velhos.sh

Obs. O comando find pode ser usado para vrios fins. Aqui estamos usando para encontrar
arquivos mais antigos que tantos dias, mas voc pode us-lo, por exemplo, para encontrar
aquivos de determinado tipo, como arquivos de imagem tipo jpg e ento usar o -exec para copiar
ou deletar ou fazer o que voc quiser.
Em um exemplo de encontrar e apagar arquivos jpg, e ento apag-los, a sintaxe seria:
find /home/seu-user/Downloads/* -name ".JPG" -exec rm {} \;

Em um exemplo de encontrar esses arquivos jpg, mas apenas os mais antigos que uma semana, e
ento apag-los, basta usar os dois parmetros juntos:
find /home/seu-user/Downloads/* -name ".JPG" -mtime +7 -exec rm {} \;

Beleza?!
Ento vamos continuar com nosso exemplo e agendar isso para rodar automaticamente.

Agendando no Cron
Use o comando:
crontab -e

(Se for a primeira vez que est usando o cron, recomendo o uso do editor de texto nano (pois o
mais fcil), quando ele lhe perguntar qual deseja usar. Opo 2, conforme a imagem abaixo)
Adicione uma linha que agendar a execuo de seu script a cada 2 meses. No exemplo abaixo
defini que as 8:30 hs, no primeiro dia do ms, a cada 2 meses, em qualquer dia da semana que cair,
ele rodar o script.
30 08 01 */2 * /caminho/do/seu/script/apaga-arquivos-velhos.sh

Obs. Se desejar, ao invs de criar um script, e colocar no agendamento do cron abaixo o caminho
dele, voc poder substituir isso pelo comando diretamente. Ficaria assim:
30 08 01 */2 * find /home/seu-user/Downloads/* -mtime +60 -exec rm {} \;

Usando o nano, salve as alteraes com o Ctrl+O e para sair Crtl+X.


Obs. Se estiver usando o vi para editar o texto (muitas distros Linux tem o vi como editor
padro do cron). Da usa-se a letra i para inserir textos dd para apagar a linha se precisar, e tecla
esc e :wq! para salvar e fechar, ou tecla esc e :q! para fechar sem salvar.
Como Usar o Comando RSync Para Transferir
Dados Para Diretrios Locais e Remotos

Hoje, vou postar este tutorial sobre o RSync, cobrindo o uso bsico deste poderoso utilitrio.
O Rsync mais do que um comando ou um simples programa. Ele pode te oferecer funcionalidades
poderosas como a de sistemas de backup.
Imagine que voc tenha dois servidores de arquivos, um em seu local, e outro em outro local, (como
outro bairro, ou cidade, estado, pas e continente). E voc precisa fazer um backup de um para o
outro, ou que o contedo dos dois sejam sincronizados. O Rsync pode fazer isso para voc. E
mesmo para uma necessidade mais simples como fazer backup ou sincronizar arquivos em
diretrios de mquinas em sua rede local, ou mesmo na mesma mquina.

O que Rsync?
Rsync, que uma abreviao de Remote Sync, ou seja, sincronizao remota, uma ferramenta
de sincronizao de arquivos locais e remotos. Ele usa um algoritmo que minimiza a quantidade de
dados copiados movendo apenas as partes de arquivos que foram alterados. Isso o que chamamos
de cpia incremental, em um processo de backup. Claro que previamente preciso ter um backup
completo, para que nas prximas vezes, ele faa o incremental.
Rsync uma ferramenta muito flexvel de sincronizao habilitada para rede. Tambm pode se
referir ao protocolo de rede desenvolvido para utilizar esta ferramenta.
Quando chamo o rsync neste tutorial, estou me referindo principalmente ao servio, e no o
protocolo.
Devido sua presena em sistemas Unix-like, por vir includo por padro na maioria das
distribuies Linux, ele se tornou muito popular como uma ferramenta includo em scripts do
sistema Linux.
Sintaxe Bsica
A sintaxe bsica do rsync muito simples, e funciona de uma maneira que semelhante ao ssh, scp
e cp.
Ou seja, rsync parmetro pasta-origem pasta-destino.
Para conhecer todos os parmetros do rsync, veja atravs do comando man rsync.
Se quiser exportar a documentao oficial para um arquivo de texto, use o comando man rsync >
rsync.txt (pois a documentao tem 3 mil linhas).

Principais Parmetros ou Flags


Aqui vamos analisar o comportamento de 10 parmetros:
-r : Recursiva, ou seja, l e opera nas subpastas e contedos tambm.
-a : Archive mode Recursiva e preserva links simblicos, arquivos especiais de dispositivo, hora
de modificao, o grupo, proprietrio e permisses.
-v : Aumenta a verbose.
-n : O mesmo que o dry-run (veja mais abaixo).
-z : Comprime os dados durante a transferncia.
-P : o mesmo que partial ou progress mostra o progresso da transferncia.
delete : apaga arquivos desejados antes, durante ou aps a tarefa de sincronizao.
include : filtro que pode ser usado para que no momento da tarefa que inclui os arquivos
especificados.
exclude : filtro que pode ser usado para que no momento da tarefa que exclui os arquivos
especificados.
dry-run : Usado para testar antes o seu comando, mostra o que seria alterado, sem realizar
alteraes.

Laboratrio Usos do Rsync


Preparao
Vamos fazer um lab para testar o funcionamento do Rsync?
Ento vamos criar dois diretrios de teste e alguns arquivos de teste com os seguintes comandos:
cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}

Agora ns temos uma diretrio chamado dir1 com 100 arquivos nele e o dir2 vazio.

1 Tranferncia Local Recursiva


A opo -r significa recursivo, o qual necessrio para fazer o sincronismo do diretrios.
Ns tambm podemos usar o parmetro -a.
rsync -a dir1/ dir2
O parmetro -a uma combinao de opes, significa archive e muito importante pois
sincroniza de forma recursiva e preserva links simblicos, arquivos especiais de dispositivo,
hora de modificao, o grupo, proprietrio e permisses.
O -a mais comumente usado que o -r e geralmente o que voc vai mais precisar usar.
Uma Nota Importante
Voc deve ter notado que h uma barra (/) no final do primeiro argumento nos comandos acima:
rsync -a dir1/ dir2

Isto necessrio e significa o contedo do dir1


A alternativa, sem a barra final, colocaria dir1, incluindo o diretrio, dentro dir2. Isso criaria uma
hierarquia que se parece com:
~/dir2/dir1/[files]

Por isso, sempre verifique seus argumentos antes de executar um comando rsync.

Testando um Comando Antes de Rod-lo Com e Sem a Barra


O Rsync fornece um mtodo para fazer isso passando as opes -n ou dry-run. O parmetro -v
(para detalhado) tambm necessrio para obter a sada apropriada:
rsync -anv ~/dir1/ ~/dir2
sending incremental file list
./
file1
file10
file100
file11
file12...
sent 1,654 bytes received 319 bytes 3,946.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

Compare esta sada com a sada que ns temos quando removemos a barra. Repare que agora ele
transferiu o diretrio todo e no apenas o contedo.
rsync -anv ~/dir1 ~/dir2
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12...
sent 1,667 bytes received 320 bytes 3,974.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
2 Usando o Rsync Via SSH Para Enviar ou Receber Arquivos/Pastas de Uma Mquina
Remota

Essa parte muito importante para transferir dados de forma segura, pela sua lan ou pela internet
atravs de lugares distantes. Ser necessrio apenas que voc possua acesso SSH para a mquina
remota e rsync instalado em ambos os lados. Se for fazer um rsync remoto (o rsync usa acesso
remoto via ssh) de ou para um servidor pela rede:

Sintaxe usando SSH


rsync parmetro pasta-origem usurio@servidor:/pasta-destino Se caso o servidor remoto usar
outra porta ssh diferente da tradicional 22, deve-se usar o parmetro ssh -p nmero-da-porta.
Exemplo: rsync -azvP ssh -p 3000 /dados/ fulano@192.168.0.50:/backup

Push Enviando Arquivos/Diretrios


Depois de ter acesso SSH verificado em entre as duas mquinas, voc pode sincronizar a pasta
dir1 a um computador remoto usando a seguinte sintaxe (note que ns queremos transferir a pasta
dir1 inteira, neste caso, portanto, omitiremos a barra direita, aps o dir1 no comando):
rsync -a ~/dir1 username@remote_host:destination_directory

Isso chamado de uma operao de push, porque ele empurra um diretrio do sistema local
para um sistema remoto.
Obs. No precisava, mas eu fiz uma ilustrao do que acontece, (usando duas mquinas com
interface grfica, para ficar melhor a visualizao), acessando via VNC (apenas para mostrar) uma
mquina remota em minha lan, e de minha mquina local, usei o rsync com ssh para copiar o
diretrio dir1 para a mquina remota.
Pull Puxando Arquivos/Diretrios
A operao oposta pull (puxar). O Pull funciona de modo contrrio, usado para sincronizar de
um diretrio remoto para o sistema local. No exemplo, o dir1 est no sistema remoto, em vez de
nosso sistema local, a sintaxe :
rsync -a username@mquina-remota:/home/username/dir1 diretrio-local-de-sua-
mquina

Ento usei o comando:


rsync -a suporte@mquina-remota:/home/suporte/Documentos/pasta_teste/dir1
/home/cleuber/Desktop/MAOE/

Assim como o cp e ferramentas similares, a fonte sempre o primeiro argumento, e o destino


sempre o segundo.
Obs. Novamente ilustrado, desculpem a piadinha, no resisti (risos)
Obs. Claro, que se voc quiser transferir dados via ssh de uma mquina que no esteja na mesma
lan e sim atravs da internet, a mquina remota ter que ter o IP e nome nos servios pblicos de
DNS, tais como o opendns, dns-omatic e etc.

3 Compactando
Se voc estiver transferindo arquivos que no foram compactados anteriormente, como arquivos de
texto, voc pode reduzir a transferncia de rede, adicionando a compresso com a opo -z:
Obs. Essa compresso para a transferncia dos arquivos, e no gera um pacote do arquivo (tipo
zip, rar, tar).
rsync -az origem destino

4 Exibindo o Progresso
O parmetro -P muito til. Ele combina as aes progress e partial. A primeira delas
mostrar uma barra de progresso para as transferncias e o segundo permite retomar transferncias
interrompidas:
rsync -azvP ~/dir1 ~/dir2

sending incremental file list


./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .
Se executar o comando novamente, vamos obter uma sada mais curta, porque nenhuma mudana
foi feita.
Isto ilustra a capacidade do rsync usar a hora de modificao (ou chamado de time stamp
tambm) para determinar se as alteraes foram feitas.
rsync -azvP ~/dir1 ~/dir2

sending incremental file list

sent 818 bytes received 12 bytes 1660.00 bytes/sec


total size is 0 speedup is 0.00

Podemos atualizar a hora de modificao em alguns dos arquivos e ver que rsync inteligentemente
re-copia apenas os arquivos alterados:
touch dir1/file{1..10}
rsync -azvP ~/dir1 ~/dir2

sending incremental file list


file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .

5 Excluindo Arquivos no Destino, Que No Existem Mais na Origem.


Imagine que voc j sincronizou a pasta de origem com a de destino, mas aps isso, o contedo da
pasta de origem tenha sido todo apagado.
Se isso acontecer, a pasta de destino continuar com os arquivos l.
Se voc tem a necessidade no apenas de transferir dados, mas manter a origem e o destino
realmente em sincronia, necessrio que quando arquivos na origem tenham sido removidos, os
arquivos do diretrio de destino sejam removidos tambm.
Ns podemos fazer isso usando a opo delete que apenas apaga documentos no destino e apenas
se eles no estiverem mais na origem.
Ento abaixo, eu tenho o dir1 (origem) vazio, mas o dir2 (destino) com os 100 arquivos l. Com o
comando abaixo, ele ir apagar os arquivos no destino, (quando eles j no existirem na origem).
rsync -azvP --delete ~/dir1 ~/dir2

Obs. Nesse caso, se a origem ainda tiver os arquivos l, e voc rodar esse comando, ele apenas
copiar os arquivos para o destino novamente, e no apagar nada (pois eles permanecem na
origem).
Agora, apague manualmente os arquivo da origem e rode o comando novamente e perceber que
ele os apagar no destino tambm.
E se por exemplo, voc apagar, apenas os 30 primeiros documentos na pasta de origem, e rodar
o comando, ele apagar apenas os mesmos 30 documentos na pasta destino.

Capiche?
Isso legal se voc configurar no Cron para rodar o comando rsync com delete, para sincronizar
os dois locais, automaticamente dentro de uma agenda que voc desejar, como por exemplo,
diariamente as 21:00hs. Mas falarei dos agendamentos no Cron um pouco mais abaixo.

6 Filtrando Arquivos Exclude ou Include


Se voc quiser excluir ou incluir certos arquivos ou diretrios localizados dentro de um diretrio
que voc est sincronizando, poder usar as opes exclude e include. Com esses dois
parmetros voc poder incluir ou ignorar arquivos especficos durante a sincronia.

Alguns Casos de Uso do Exclude e Include

Excluir uma pasta especfica.


Supomos que eu quero excluir do backup uma subpasta chamada teste:
exclude teste (sem digitar o caminho, pois o caminho de origem j descrito logo aps).
Se houver vrias pastas com o nome teste, como teste1, teste2, e teste3, basta usar o caractere
*:
exclude teste*
rsync -azvP --exclude 'teste*' ~/dir1 ~/dir2

Excluir um arquivo especfico


rsync -avz --exclude 'dir1/file3.txt' ~/dir1/ ~/dir2

Tambm possvel criar uma lista de excluses (com pastas e arquivos na lista)
Voc pode criar um arquivo de texto chamado exclude.txt. E vamos dizer que eu salvei este
arquivo em minha pasta home, e com o seguinte contedo:
file1.txt
/home/cleuber/dir1/file4.txt
/home/cleuber/dir1/teste/

Da o comando ficaria assim:


rsync -azvP --exclude-from='/home/cleuber/exclude.txt' ~/dir1 ~/dir2

Exclude e Include Juntos em um Rsync de pull remoto.


Neste exemplo, o rsync, ir fazer um pull (puxar), copiar do servidor remoto o contedo da pasta
/var/log e colar esse contedo na pasta local /root/log, e ir incluir apenas os arquivos quem
comearem com a letra M e excluir todos os outros arquivos e diretrios do sincronismo.
Usaremos a combinao de flags avze
rsync -avze ssh --include 'm*' --exclude '*' root@192.168.0.25:/var/log/
/root/log

Rsync e Cron Automatizando Backupes


O Rsync que rodamos aqui nos testes foram feitos manualmente por ns e executou corretamente
conforme nossa necessidade.
Agora, imagine que voc queira que o rsync sincronize os diretrios origem e destino, mas rodando
automaticamente dentro de uma agenda. Isso possvel!
Basta adicionar um agendamento usando o Cron. Muito legal no ?!
Obs. Autenticao em mquinas remotas via ssh:
O comando do rsync configurado dentro do cron, tem um detalhe. que quando voc roda o rsync
manualmente via ssh em mquinas remotas, ser solicitada uma senha, que voc dever
digitar.
Mas agendando via cron para rodar em um horrio que voc no estar presente, a tarefa no se
concluir por causa da pendncia da entrada da senha, mas eu tenho a soluo!

Autorizando Acesso SSH Usando Chaves Sem Senha


Para fazer isso, basta autorizar a mquina destino no servidor origem, para que a senha do acesso
ssh no seja solicitada.
Voc pode at pensar que isso seja inseguro, mas no , pois na verdade o acesso via SSH ser
realizado atravs da leitura de chave pblica, estabelecendo uma confiana entre o servidor e o
cliente, permitindo o acesso somente quando validadas as chaves. Para fazer isso leia este artigo:

Autorizando Acesso SSH Com Chaves Sem Solicitar Senha


Se seguiu o tutorial do link corretamente, agora no aparecer mais o pedido de digitao da senha
no acesso ssh ao servidor destino configurado, e voc poder adicionar no Cron seu rsync remoto
via ssh sem problemas.

5 Casos de Uso do Rsync e Cron Juntos


Usar o Rsync e o Cron pode ser muito til. Vou descrever 4 casos de uso, e a juno de casos, para
ter por exemplo, no ltimo caso, uma automatizao do backup de um servidor, que ir rodar uma
compactao dos arquivos alvo, criar um arquivo s compactado, com a data do backup no nome do
arquivo e enviado para outra mquina remota diariamente as 2:00 da manh.
Muito chique no ?!
Uma vez configurado um procedimento desse, voc no precisar fazer mais nada, a no ser checar
se os arquivos esto l e de tempos em tempos apagar os backups mais antigos que no desejar.
Saiba mais sobre o Cron: Cron (Agendador de Tarefas do Linux).
Saiba mais sobre script de compactao e agendamentos no Cron.
Caso 1 Em 1 Passo
Agendando no Cron com comando inteiro de RSync remoto, buscando todos os arquivos, sem
compactao.
Vamos fazer com que o Cron rode um comando de rsync em um cliente, para puxar (pull),
arquivos de um servidor remoto, e salv-los localmente, diariamente as 2:00 da manh.
Quero copiar o contedo da pasta /empresa/contabilidade que est em um servidor remoto, e col-
lo na minha pasta local ~/Documentos/backupes/contabilidade.
Vamos editar o crontab com o comando:
crontab -e

Obs. Se voc nunca usou o Cron, ele ir pedir na primeira vez que voc escolha o editor de texto
que prefere usar para edit-lo. Eu gosto do nano, pois o considero mais prtico.
Agora, adicione a seguinte linha em seu cron:
01 02 * * * rsync -avz usurio@ip-do-servidor:/empresa/contabilidade
~/Documentos/backupes/contabilidade

Sintaxe do Cron
* * * * * comando a ser executado
- - - - -
| | | | +----- dia da semana (0 - 6) (domingo=0)
| | | +-------- ms (1 - 12)
| | +----------- dia do ms (1 - 31)
| +-------------- hora (0 - 23)
+----------------- minuto (0 - 59)

Caso 2 Em 2 Passos
Criando script de envio de arquivos sem compactao e depois agendando a execuo dele no
cron
Passo 1 Criar script de envio de arquivos RSync remoto, buscando todos os arquivos, sem
compactao.
Passo 2 Agendando execuo do script no Cron
Passo 1 Criar script de envio de arquivos
Voc poder criar um script de backup e no cron, ao invs do comando do rsync, bastar colocar o
caminho do seu arquivo de script.
Abra seu editor de texto favorito e crie um script como esse:
#!/bin/bash
rsync -avz usurio@ip-do-servidor:/empresa/contabilidade
~/Documentos/backupes/contabilidade

Agora, salve, feche e d permisso de execuo do seu script. (eu salvei na raiz e dei o nome de
backup-contabilidade).
sudo chmod +x /backup-contabilidade.sh
Passo 2 Agendando no Cron a execuo do script
E depois no Cron,
crontab -e

ao invs de inserir o comando todo, ficaria apenas assim:


01 02 * * * /backup-contabilidade.sh

Mais limpo no ?!

Caso 3 Em 1 Passo
Agendando Atravs das Pastas do Cron, Usando script de RSync remoto, buscando todos os
arquivos, sem compactao.
Mas se quiser fazer algo mais simples, ou seja, que rode de hora em hora, 1 vez semanalmente,
mensalmente e assim por diante, existe um meio bem simples. E nesse caso, no use o crontab
-e.
Apenas copie e cole seu script de backup (previamente criado no caso2) em uma das pastas do
cron especficas que o rodaro conforme o nome de cada pasta.
Temos as seguintes pastas na estrutura de arquivos do Cron:
cd /etc/
cron.hourly => de hora em hora
cron.daily => diariamente
cron.weekly => semanalmente
cron.monthly => mensalmente
Basta colar seu script em uma delas de sua escolha e pronto.
sudo cp /etc/cron.a-pasta-de-agendamento-que-quiser

Caso 4 Em 4 Passos
Vamos fazer um script de backup com compactao e timestamp no nome do arquivo e agendar a
execuo dele no cron. E vamos fazer um script de transferncia para outro servidor do backup
compactado que foi realizado e agendar a execuo dele.
Passo 1 Criando Script de Compactao de seu backup com Tar.Gz, usando Time Stamp.
Passo 2 Agendando no Cron Usando o Script de Compactao e Salvando em diretrio local de
backup.
Passo 3 Criar Script de Envio usando o Rsync remoto para mquina cliente.
Passo 4 Agendando no Cron Usando o previamente criado script de RSync remoto dos arquivos
compactados.

Passo 1 Criando Script de Compactao


Voc pode tambm, atravs de um script, previamente compactar no servidor remoto, seus arquivos
de backup, colocar o pacote de backup em outra pasta com timestamp no nome, ou seja, com a data
de backup gravado no nome do arquivo compactado, e ento agendar via cron para um horrio, e
depois agendar via cron em um horrio posterior transferi-lo para outro lugar.
1 Acesse seu servidor remoto siga os passos:
2 Vamos criar uma pasta onde salvar os arquivos compactados com o sudo mkdir /backupes.
3 Agora, use seu editor de texto para criar um script de compactao como este abaixo:
#!/bin/bash
#Propsito = Backup de Arquivos em "/empresa/contabilidade"
# START
TIME=`date +%b-%d-%y `
# Este comando ir adicionar a data no Nome do Arquivo de Backup.
FILENAME=backup-$TIME.tar.gz
# Aqui eu defino o formato do nome do arquivo de backup.
SRCDIR=/empresa/contabilidade # Local Fonte
- onde esto os arquivos a serem feitos backup.
DESDIR=/backupes # Local Destino - onde o Backup ser salvo.
tar -cpzf $DESDIR/$FILENAME $SRCDIR
#END

4 Salve seu script e d permisso de execuo, (no meu caso salvei como compact-files-cont.sh)
sudo chmod +x /compact-files-cont.sh

Passo 2 Agendando no Cron para realizar o backup local compactado a 1:00 da manh.
E agendamos no Cron para rodar diariamente a 1:00 da manh:
crontab -e

01 01 * * * /compact-files-cont.sh

Agora, teremos, (depois da execuo do script pelo cron), um arquivo apenas, compactado e
colocado na pasta da raiz /backupes.
O arquivo ter o nome nesse formato: backup-data-do-backup.tar.gz

Passo 3 Criando Script de Rsync para Buscar Backup Compactado.


A para transmitir esse backup para um cliente, seja ele uma estao ou um outro servidor, via pull
(puxar), basta, no cliente, fazer o mesmo que fizemos antes, alterando apenas a pasta que ele ir
buscar do destino.
Crie um script em seu cliente:
#!/bin/bash
rsync -avz usurio@ip-do-servidor:/backupes ~/Documentos/backupes/contabilidade

Agora, salve, feche e d permisso de execuo do seu script. (eu salvei na raiz e dei o nome de
backup-contabilidade).
sudo chmod +x /backup-contabilidade.sh
Passo 4 Agendando no Cron o Script de Rsync para buscar backup dos arquivos
compactados as 2:00 da manh.
E depois no Cron, agende para rodar as 2:00 da manh.
crontab -e

01 02 * * * /backup-contabilidade.sh

UFA!!!

Caso 5 Rodando Comando Remoto Via SSH


Aqui apenas uma observao;
Caso haja alguma dificuldade do Rsync ser executado remotamente, ou seja, de uma para outra
mquina em outro IP, voc pode usar o ssh para rodar um comando de rsync (ou qualquer outro
comando sobre ssh). Nesse contexto, quando voc roda um comando via ssh com a sintaxe ssh
usurio@server comando, o comando ser executado no destino remoto e voc poder ver a sada
do comando em seu terminal, e tudo isso, sem que voc faa login no servidor remoto. O ssh ento
usado apenas para enviar o comando e ver a sada dele, e isso muito til.
Exemplo do Rsync sobre ssh:
ssh user@server-origem rsync -arzvP /pasta-a-se-fazer-backup user@server-
destino:/pasta-de-destino-do-backup/

Voc pode ento rodar esse comando diretamente ou criar um script com essa sintaxe e nos dois
casos, agendar no Cron se desejar (com comando direto ou apontando para um script), mas lembre-
se que para que rode sozinho de forma agendada no Cron preciso que no se exija senha de
autenticao via ssh entre um servidor outro, como expliquei no artigo que mostrei mais acima
sobre usar chaves de autenticao.

Visualizando o log de tarefas do Cron


Para ver se as tarefas rodaram adequadamente atravs da anlise de logs, d uma olhada neste
artigo:
http://www.cleuber.com.br/index.php/2016/01/19/gerenciando-os-logs-do-cron

Concluso
Rsync pode simplificar as transferncias de arquivos atravs de conexes de rede e adicionar
robustez a sincronizao de diretrios.
A flexibilidade do rsync o torna uma boa opo para muitas operaes diferentes no nvel de
arquivos.
O domnio da ferramenta Rsync lhe permitir projetar operaes de backup complexos e obter o
controle refinado sobre o que transferido e como.
Autorizando Acesso SSH Com Chaves Sem
Solicitar Senha

Hoje, por causa de uma necessidade muito especfica, resolvi postar uma forma de credenciar nas
configuraes ssh de um servidor, para que um client o acesse, sem que senha seja solicitada, para
que, por exemplo, scripts de backup possam transferir dados via ssh, sem problemas.
Voc pode at pensar que isso pode ser inseguro, mas no , pois na verdade o acesso via SSH ser
realizado atravs da leitura de chave pblica e privada, estabelecendo uma confiana entre o
servidor e o cliente, permitindo o acesso somente quando validadas as chaves.

1 Gerando as chaves
Vamos usar o comando ssh-keygen no servidor de origem para fazer isso:
$ ssh-keygen -t rsa -C "Minha_Chave_SSH"
Enter passphrase:
Enter same passphrase again:

Ele ir pedir para confirmar o caminho, ento aperte Enter para o padro. E em seguida ele lhe
pedir a senha, no digite nada, aperte apenas a tecla Enter nas duas vezes.
Parmetros que usamos:
-t -> Especifica o tipo de chave, no nosso caso uma chave RSA
-C -> Comentrio da chave
A sada do comando dever se parecer com isso:
Sero gerados dois arquivos, id_rsa (Chave Privada) eid_rsa.pub (Chave Pblica).
Voc poder chec-los:
ls ~/.ssh
id_rsa id_rsa.pub known_hosts

2 Copiando a chave pblica para o servidor


Agora vamos enviar a chave pblica para o servidor destino com o comando scp:
cd ~/.ssh/

scp id_rsa.pub cleuber@ip-do-servidor:/home/cleuber/.ssh/

Pronto copiada!

3 Checando se a chave pblica foi transferida


Vamos fazer um acesso ssh (ainda com senha por enquanto) para checar a chave pblica
ssh cleuber@ip-do-servidor

Agora estamos logados remotamente no servidor, cheque com o mesmo comando.


ls ~/.ssh
id_rsa.pub known_hosts
4 Criando o arquivo authorized_keys com o contedo da chave pblica nele.
Para fazer isso, voc precisa continuar logado no servidor remoto, e usaremos o seguinte comando:
cat id_rsa.pub > authorized_keys

5 Editando as configuraes do Servio SSH


Ainda no acabamos, vamos agora configurar o SSH do servidor para aceitar autenticao baseado
em chave.
Voc pode usar seu editor de texto favorito. Eu aqui usarei o nano.
sudo nano /etc/ssh/sshd_config

Obs. Se voc precisar configurar isso no HP-UX que usa o Unix, o arquivo de configurao
atravs do caminho /opt/ssh/etc/sshd_config.
Verifique se as seguintes no esto comentadas, ou seja, com um smbolo # no incio delas, e com
o yes, na primeira linha, conforme abaixo.
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Como estou usando o nano, salvei com Ctrl+O e sa com o Ctrl+x
Obs. Opcional
Existem restries de segurana para que isso funcione, caso as permisses de arquivo requeridas
no campo StrictModes" estiver habilitado e com o yes.
No exemplo abaixo, por padro o StrictModes est comentado com # ento est desabilitado.

Home
Dicas e Tutoriais
Temas
Distro Reviews
Destaques
Notcias
Segurana
Games
Hardware
Sobre Mim

Home / Dicas e Tutoriais / Autorizando Acesso SSH Com Chaves Sem Solicitar Senha

Autorizando Acesso SSH Com Chaves Sem


Solicitar Senha
Posted by: cleuberadmin in Dicas e Tutoriais, Linux, Servidores Linux 27/11/2015 0 608 Views
Ol pessoal,
Hoje, por causa de uma necessidade muito especfica, resolvi postar uma forma de credenciar nas
configuraes ssh de um servidor, para que um client o acesse, sem que senha seja solicitada, para
que, por exemplo, scripts de backup possam transferir dados via ssh, sem problemas.
Voc pode at pensar que isso pode ser inseguro, mas no , pois na verdade o acesso via SSH ser
realizado atravs da leitura de chave pblica e privada, estabelecendo uma confiana entre o
servidor e o cliente, permitindo o acesso somente quando validadas as chaves.

1 Gerando as chaves
Vamos usar o comando ssh-keygen no servidor de origem para fazer isso:
$ ssh-keygen -t rsa -C "Minha_Chave_SSH"
Enter passphrase:
Enter same passphrase again:

Ele ir pedir para confirmar o caminho, ento aperte Enter para o padro. E em seguida ele lhe
pedir a senha, no digite nada, aperte apenas a tecla Enter nas duas vezes.
Parmetros que usamos:
-t -> Especifica o tipo de chave, no nosso caso uma chave RSA
-C -> Comentrio da chave
A sada do comando dever se parecer com isso:

Sero gerados dois arquivos, id_rsa (Chave Privada) eid_rsa.pub (Chave Pblica).
Voc poder chec-los:
ls ~/.ssh
id_rsa id_rsa.pub known_hosts
2 Copiando a chave pblica para o servidor
Agora vamos enviar a chave pblica para o servidor destino com o comando scp:
cd ~/.ssh/

scp id_rsa.pub cleuber@ip-do-servidor:/home/cleuber/.ssh/

Pronto copiada!

3 Checando se a chave pblica foi transferida


Vamos fazer um acesso ssh (ainda com senha por enquanto) para checar a chave pblica
ssh cleuber@ip-do-servidor

Agora estamos logados remotamente no servidor, cheque com o mesmo comando.


ls ~/.ssh
id_rsa.pub known_hosts

4 Criando o arquivo authorized_keys com o contedo da chave pblica nele.


Para fazer isso, voc precisa continuar logado no servidor remoto, e usaremos o seguinte comando:
cat id_rsa.pub > authorized_keys

5 Editando as configuraes do Servio SSH


Ainda no acabamos, vamos agora configurar o SSH do servidor para aceitar autenticao baseado
em chave.
Voc pode usar seu editor de texto favorito. Eu aqui usarei o nano.
sudo nano /etc/ssh/sshd_config

Obs. Se voc precisar configurar isso no HP-UX que usa o Unix, o arquivo de configurao
atravs do caminho /opt/ssh/etc/sshd_config.
Verifique se as seguintes no esto comentadas, ou seja, com um smbolo # no incio delas, e com
o yes, na primeira linha, conforme abaixo.
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Como estou usando o nano, salvei com Ctrl+O e sa com o Ctrl+x
Obs. Opcional
Existem restries de segurana para que isso funcione, caso as permisses de arquivo requeridas
no campo StrictModes" estiver habilitado e com o yes.
No exemplo abaixo, por padro o StrictModes est comentado com # ento est desabilitado.

Caso isso esteja habilitado (sem o # e com o yes),voc precisar se certificar que a pasta .ssh
tenha a permisso 700, e o arquivo id_rsa esteja com 600, no servidor e no client.
Se precisar, ento, faa isso nos dois lados (no cliente e no servidor)
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

6 Reinicie o servio do SSH


Agora, ainda logado no servidor destino, reinicie o servio SSH.
O comando pode variar dependendo do seu Linux
sudo /etc/init.d/ssh restart
sudo service sshd restart

Obs. Se voc estiver usando o HP-UX, reinicie o servio do SSH com os seguintes comandos:
Parar
# /sbin/init.d/secsh stop

Iniciar
# /sbin/init.d/secsh start

7 Teste o acesso SSH sem senha


Agora, a hora da verdade Faa logoff do acesso ssh que est fazendo em seu servidor remoto e
login novamente.
ssh cleuber@ip-do-servidor
Crie seu AD com Samba no Ubuntu 14.04

Uma das coisas que fiz em meus laboratrios h algum tempo, mas havia me esquecido de publicar
aqui, foi criar um Controlador de Domnio Primrio em minha rede com Samba e colocar algumas
mquinas nesse domnio.
Este servio muito comum em empresas utilizando servidores Windows. O software do Windows
que realiza este servio o Active Directory, mas no Linux faremos isso com o Samba que alm de
servidor de arquivos pode ser Controlador de Domnio.
Desde a verso 4 do Samba ele passou a ter total compatibilidade com o AD do Windows, tornando
possvel realizar as mesmas tarefas de gerenciar um domnio que faria no Windows, pois at mesmo
as ferramentas administrativas que usar para gerenciar seu domnio sero as do Windows
realizadas remotamente de dentro de um Desktop Windows, mas vamos l mostrar na prtica.
mas antes:
Algumas definies via Wikipedia:

AD: Active Directory:


O Active Directory uma implementao de servio de diretrio no protocolo LDAP que armazena
informaes sobre objetos em rede de computadores e disponibiliza essas informaes a usurios e
administradores desta rede. O Active Directory um software da Microsoft utilizado em ambientes
Windows.
Caso precise, voc pode querer saber tambm o que o Kerberos.
Agora sim!
Instalao
Observaes Importantes!
Este tutorial no recomendado para usurios iniciantes, ou seja, preciso saber o que deseja fazer
e porqu vai fazer isso, possuir algum conhecimento de conceitos de infraestrutura de TI e redes, e
de preferncia realizar a instalao em uma mquina virtual (com snapshot antes da instalao, pois
a voc volta o snapshot se algo der errado).
Tambm importante salientar que quando chegar o momento de definir a senha do AD, use uma
senha forte, ou seja, com mais de 7 caracteres e de preferncia, com nmeros, algum caractere
maisculo e caracteres especiais, simples exemplo: Laranja#2016. E anote suas senhas para no
esquecer.
So boas prticas de administradores.

1 Configure IP esttico e nome do seu host e AD.


Defina a configurao conforme sua rede. No exemplo a seguir, minha rede 192.168.0.0, e o nome
de minha mquina e ad ser ad e o nome da minha mquina ser cleuber.local, ento o FQDN
(Fully Qualified Domain Name) ser ad.cleuber.local.
Caso voc esteja usando Ambiente Grfico, pode fazer isso via aplicativo de configurao de rede
de seu Ubuntu, ao lado do relgio.
Caso seja sem Ambiente Grfico, use o editor de texto, como o vi ou nano, e edite este arquivo
de acordo com a sua rede, conforme exemplo abaixo (usarei o nano, lembrando que com o nano,
voc depois de editar o arquivo de texto, salva-se com Ctrl+O e fecha-se com Ctrl+x):
Primeiramente logando como root, e depois j configurando a rede.
sudo su

nano /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.0.seuip
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.7
dns-nameservers 192.168.0.seuip 8.8.8.8

(este segundo um servidor de DNS na nuvem, no caso este 8.8.8.8 o do Google, mas poderia ser o
208.67.222.222 ou 208.67.220.220, que o do OpenDNS)
dns-search cleuber.local (este ser o nome do domnio)
nano /etc/hosts
127.0.0.1 localhost
192.168.0.seuip ad.cleuber.local

echo ad.cleuber.local > /etc/hostname


2 Comece instalando alguns pacotes:
apt-get install gcc flex make gdb python-ldap python-dev libacl1-dev

3 Baixe o samba 4, e descompacte-o.


wget www.samba.org/samba/ftp/stable/samba-4.1.10.tar.gz
tar zxvf samba-4.1.10.tar.gz

4 Realize a instalao
Acesse a pasta onde descompactou
cd samba-4.1.10

Faa o build do cdigo fonte, prepare a instalao e instale com estes 3 comandos. Demora um
pouco at terminar.
./configure --enable-debug --enable-selftest
make
make install

5 Levantando o Domnio
hostname (para ver o nome da sua mquina)

O comando que iremos usar trar um wizard para que voc escolha opes de configurao do seu
AD. Depois do comando, preencha o que o wizard pedir, quando aparecer um item dentro de [ ]
quer dizer que o padro e voc poder teclar Enter para confirmar o padro, ou se preferir
digitar o padro.
/usr/local/samba/bin/samba-tool domain provision

Realm: DOMAIN.LOCAL (aqui voc coloca o nome do seu domnio)


Server Role (dc, member, standalone) [dc]: Enter para o padro dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DL2, NONE)
[SAMBA_INTERNAL]: Enter para o padro SAMBA_INTERNAL
BND fowarder IP address (write none to disable fowarding) [192.168.0.1]: Caso o dns dele no
consiga resolver o nome das mquinas, vamos usar o padro que o gateway do seu roteador.
Administrator password: agora defina sua senha
Agora basta esperar. Ele mostrar o resultado com um resumo ao final do processo parecido com
isso:
Server Role: active directory domain controller
Hostname: cleuber
NetBIOS Domain: ad
DNS Domain: cleuber.local
DOMAIN SID: aparecer um monte de nmeros

7 Ative o servio
Ative com o comando abaixo
/usr/local/samba/sbin/samba
8 Verifique e teste tudo
8.1 Verifique os processos do Samba com o comando abaixo:
ps -aux | grep samba

8.2 Verifique a verso dos pacotes do samba server e cliente:


/usr/local/samba/sbin/samba -V
/usr/local/samba/bin/smbclient V

8.3 Verifique o LDAP


host t SRV _ldap._tcp.cleuber.local

Se der certo retornar uma mensagem assim:


_ldap._tcp.cleuber.local has SRV record 0 100 389 ad.cleuber.local.

8.4 Verifique o AD:


/usr/local/samba/bin/smbclient -L localhost -U%

A sada deve ser algo como esta:


Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (ad server (Samba, Ubuntu))
print$ Disk Printer Drivers
Domain=[CLEUBER] OS=[Unix] Server=[Samba 4.1.10]

Server Comment
--------- -------
Workgroup Master
--------- -------

8.5 Verifique o servio do Kerberos e a autenticao:


host t SRV _kerberos._udp.cleuber.local

Se der certo retornar uma mensagem assim:


_kerberos._tcp.cleuber.local has SRV record 0 100 88 ad.cleuber.local.

Autenticao:
/usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%suasenha
-c ls

E entre com seu usurio e senha.


Se a autenticao der certo, ser retornada uma resposta como esta abaixo:
. D 0 Wed Jul 30 11:44:52 2014
.. D 0 Wed Jul 30 11:45:06 2014

9 Rede Novamente, ps-instalao:


Faa mais uma configurao de Rede para resoluo do nome do seu AD. (Esta deve ser feita
depois de instalar o AD, para editar o arquivo de configurao do mesmo).
echo domain CLEUBER.LOCAL >> /etc/resolv.conf
nano /usr/local/samba/etc/smb.conf

Na sesso [Global], altere a linha dns fowarder para:


dns fowarder = 8.8.8.8 (ou outro servidor de DNS na nuvem ou local se houver)

10 Configure o nome do AD no Kerberos


nano /usr/local/samba/share/setup/krb5.conf

Mude a linha default.realm, substituindo o texto aps o =, para default.realm =


CLEUBER.LOCAL (no meu caso)

11 Crie o diretrio para os usurios


mkdir m 770 /Users
chmod g+s /Users
chown root.users /Users

Edite as configuraes do samba


nano /usr/local/samba/etc/smb.conf

V at a sesso [Sysvol] e edite o caminho path para:


path = /usr/local/samba/var/locks/sysvol

E adicione a seguinte sesso abaixo:


[Users]
directory_mode: parameter = 0700
read only = no
path = /Users
csc policy = documents

Ok! AD no AR!
Agora Reinicie a mquina.

12 Colocando uma mquina Windows no domnio.


12.1 Altere o DNS da mquina com Windows para o IP do seu Ubuntu Server
12.2 Teste se j est se comunicando com um ping no nome e IP do server
12.3 Em propriedades da mquina tire-a do Workgroup e coloque-a no domnio (no meu caso
cleuber.local), aparecer uma mensagem Bem Vindo ao Domnio Cleuber.local! e solicitar
para reiniciar a mquina.
Observe na imagem abaixo todas estas coisas j feitas.
12.4 Aps reiniciar a mquina, faa login utilizando seu administrador do domnio, e pronto. No
caso do Windows 8.1, voc clicar na seta para trs na tela de login, escolher Outro Usurio e
colocar o nome do seu dominio\nome do seu administrador.
(No meu caso, cleuber.local\Administrator).

13 Administre o seu Domnio, instalando as Ferramentas Administrativas


Para usar sua mquina Windows para administrar o domnio preciso instalar as Ferramentas
Administrativas.
13.1 Baixe-as atravs dos seguintes links de acordo com a verso do seu Windows.
Download ferramenta para XP: http://www.microsoft.com/en-us/download/details.aspx?id=6315
Download ferramenta para Win7: http://www.microsoft.com/en-us/download/details.aspx?id=7887
Download ferramenta para Win8: http://www.microsoft.com/en-us/download/details.aspx?id=28972
13.2 Instale-a em seu Windows. (de acordo com a verso do seu Windows)
13.3 Depois de instaladas v ate Painel de Controle/Ferramentas Administrativas/Usurios e
Computadores do Active Directory, e abra-o. (Ou procure por ele no Start Menu do Windows).
Sugiro criar um atalho na Area de Trabalho ou barra de tarefas para facilitar a abertura nas
prximas.
13.4 Testando Criao de OUs (Unidades Organizacionais) e usurios, conforme as 3 imagens
abaixo:
14 Testando o login de usurio criado:
Aps ter criado o primeiro usurio, pode fazer logoff do Administrador do dominio, e faa login
com o novo usurio. Clique em Outro Usurio Novamente. Eu criei o usurio
cleuber.hashimoto.
Espere o Windows preparar seu ambiente.
Login com usurio do domnio recm-criado testado e funcionando!
Concluso:
Acabamos de criar um AD atravs do Ubuntu similar a um AD do Windows Server 2003, e
totalmente compatvel com as Ferramentas Administrativas para gerenciamento a partir de
mquinas com Windows, o que uma soluo excelente para empresas pequenas que no desejam
pagar pela licena de um servidor Microsoft para fazer isso. Naturalmente em ambientes que usaro
mais recursos e servidores Microsoft, torna-se recomendvel adotar a plataforma completa para
todos os servidores.

S-ar putea să vă placă și