<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Atitude Reflexiva</title>
	<atom:link href="http://atitudereflexiva.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://atitudereflexiva.wordpress.com</link>
	<description>Reflexões Sobre Desenvolvimento de Software</description>
	<lastBuildDate>Thu, 05 Jan 2012 15:40:06 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='atitudereflexiva.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Atitude Reflexiva</title>
		<link>http://atitudereflexiva.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://atitudereflexiva.wordpress.com/osd.xml" title="Atitude Reflexiva" />
	<atom:link rel='hub' href='http://atitudereflexiva.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Não Complica Minha Vida</title>
		<link>http://atitudereflexiva.wordpress.com/2011/07/14/nao-complica-minha-vida/</link>
		<comments>http://atitudereflexiva.wordpress.com/2011/07/14/nao-complica-minha-vida/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 22:22:59 +0000</pubDate>
		<dc:creator>Rodrigo Martins</dc:creator>
				<category><![CDATA[Atitude]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://atitudereflexiva.wordpress.com/?p=468</guid>
		<description><![CDATA[A maior parte do sistema que estamos &#8220;evoluindo&#8221; foi escrita em C muitos anos atrás. O core não foi reescrito; apenas inchou. A interface gráfica foi refeita em Java/Swing, mas as integrações continuam presas aos grilhões do legado C e dos muitos scripts que deixam o software chumbado na plataforma em que executa. Durante a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atitudereflexiva.wordpress.com&amp;blog=8094430&amp;post=468&amp;subd=atitudereflexiva&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Arial, sans-serif;font-size:13px;">A maior parte do sistema que estamos &#8220;evoluindo&#8221; foi escrita em C muitos anos atrás. O <em>core</em> não foi reescrito; apenas inchou. A interface gráfica foi refeita em Java/Swing, mas as integrações continuam presas aos grilhões do legado C e dos muitos scripts que deixam o software chumbado na plataforma em que executa.</span></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Durante a manutenção de uma parte do sistema, vi um código mais ou menos assim (alteramos os nomes para não comprometer os culpados):</span></p>
<p><pre class="brush: java;">
(...)
     for(int i; i &lt; widgets.length; i++)
        lstWidgets.get(i).setStatus(widgets[i] == 1);
(...)
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Os nomes das variáveis e outras coisas que vi estavam bem pouco inteligíveis. Falei um pouco sobre o tipo de trabalho que ando fazendo <a href="http://atitudereflexiva.wordpress.com/2011/05/30/ame-teu-codigo-como-a-ti-mesmo/" title="Ame Teu Código Como a Ti Mesmo" target="_blank">aqui</a>.</span></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Pensando em clareza, esse pedacinho singelo de código chega a ser pavoroso. Como não entendi a intenção do método, fui conversar com o pessoal do C. Me explicaram que eram enviados 4 bytes onde cada bit representava o estado de um &#8220;widget&#8221;: &#8220;1&#8243; para ativado e &#8220;0&#8243; para desativado. Eles argumentaram que poderiam enviar até 32 &#8220;widgets&#8221; mantendo essa estrutura. Uma solução típica de quem vive no e do passado.</span></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Com as informações que colhi, fiz uma pequena alteração para que outras pessoas entendam o significado de &#8220;0&#8243; e &#8220;1&#8243; no contexto dos &#8220;widgets&#8221;:</span></p>
<p><pre class="brush: java;">
     private boolean isActivated(int widgetStatusIndex){
         return widgets[widgetStatusIndex] == 1; // 1 para ativado e 0 para desativado
     }
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Também melhorei um pouco e adicionei um comentário explicativo ao parser do &#8220;array de bits&#8221;. Poderia ter utilizado um tipo enumerado para dar mais significado aos números cabalísticos &#8220;0&#8243; e &#8220;1&#8243;, mas achei que seria preciosismo. Como estamos finalizando uma fase do projeto, é o que dá pra fazer. Refactorings e, se possível, redefinição das interfaces, ficam para a próxima fase.</span></p>
<br />Filed under: <a href='http://atitudereflexiva.wordpress.com/category/atitude/'>Atitude</a>, <a href='http://atitudereflexiva.wordpress.com/category/programacao/'>Programação</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atitudereflexiva.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atitudereflexiva.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atitudereflexiva.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atitudereflexiva.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atitudereflexiva.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atitudereflexiva.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atitudereflexiva.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atitudereflexiva.wordpress.com/468/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atitudereflexiva.wordpress.com&amp;blog=8094430&amp;post=468&amp;subd=atitudereflexiva&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atitudereflexiva.wordpress.com/2011/07/14/nao-complica-minha-vida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b6ec205035a57ccefcf059f2c5858822?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">rdomartins</media:title>
		</media:content>
	</item>
		<item>
		<title>Ame Teu Código Como a Ti Mesmo</title>
		<link>http://atitudereflexiva.wordpress.com/2011/05/30/ame-teu-codigo-como-a-ti-mesmo/</link>
		<comments>http://atitudereflexiva.wordpress.com/2011/05/30/ame-teu-codigo-como-a-ti-mesmo/#comments</comments>
		<pubDate>Mon, 30 May 2011 22:48:08 +0000</pubDate>
		<dc:creator>Rodrigo Martins</dc:creator>
				<category><![CDATA[Atitude]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://atitudereflexiva.wordpress.com/?p=411</guid>
		<description><![CDATA[Nas últimas semanas, começamos um trabalho de levantamento do que ficou pendente &#8211; ou melhor, do que foi empurrado com a barriga desde o começo &#8211; para finalizarmos o projeto. As pendências incluem requisitos parcialmente atendidos e tarefas técnicas. Me surpreende &#8211; às vezes não &#8211; o tipo de código que vejo em certos módulos. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atitudereflexiva.wordpress.com&amp;blog=8094430&amp;post=411&amp;subd=atitudereflexiva&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Arial, sans-serif;font-size:13px;">Nas últimas semanas, começamos um trabalho de levantamento do que ficou pendente &#8211; ou melhor, do que foi empurrado com a barriga desde o começo &#8211; para finalizarmos o projeto. As pendências incluem requisitos parcialmente atendidos e tarefas técnicas. Me surpreende &#8211; às vezes não &#8211; o tipo de código que vejo em certos módulos. Vendo o histórico das alterações nas linhas de um método, parece que todo mundo que já passou pelo projeto colocou a mão ali mais de uma vez, mas ninguém se preocupou sequer em fazer alguns pequenos <em>refactorings</em> que melhorariam a legibilidade daquele código.</span></p>
<p><span class="Apple-style-span" style="font-family:Arial, sans-serif;">Acho que um código limpo mostra comprometimento com a equipe e preocupação com a qualidade. Às vezes, basta alterar o nome de uma variável e já temos um bom ganho em clareza. Há ocasiões em que a aplicação de alguns <em>patterns</em> ajudariam bastante. Fico bastante chateado quando concluo que o que faltou foi um entendimento de orientação a objetos, fundamentos de programação ou conhecimento da API. Pouco conhecimento de negócio, dependendo do que for e da postura para procurar saber, é aceitável, pois essa aplicação é bastante complexa. Por isso, vou usar um exemplo fictício de outra área de negócio, mas que contém elementos que garimpei do nosso código:</span></p>
<p><pre class="brush: java;">
private int calculateDiscounting(int c){
     // Se o cliente for uma pequena fazenda, não tem desconto
     int dis = 0;
     // Se o cliente for uma grande fazenda, tem um desconto especial
     if(c == 1){
         dis = 1;
     }
     return dis;
}
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Esse método, mesmo sendo pequeno, apresenta vários problemas. Vale lembrar que para fazer um <em>refactoring</em> não é só o tamanho de um método que deve ser levado em consideração. A picada da aranha armadeira, um bicho minúsulo, pode te matar. O vírus da AIDS, invisível a olho nú, destrói o sistema imunológico e abre caminho para aniquilação do organismo. É assim que encaro um código ruim: um pequeno inimigo muito perigoso que precisamos combater.</span></p>
<p><span class="Apple-style-span" style="font-family:Arial, sans-serif;">Não vou fazer todas as alterações que gostaria de fazer nesse código. Vamos apenas aumentar a clareza. Se um dia surgisse um requisito que necessitasse de intervenção em código, partiríamos de uma implementação &#8220;<em>refactoring friendly</em>&#8220;.</span></p>
<p><span class="Apple-style-span" style="font-family:Arial, sans-serif;">Pelo nome, calculateDiscounting(&#8230;) afirma que faz um cálculo de desconto, mas o que vemos é uma decisão quanto à categoria de desconto. Os nomes do parâmetro e das variáveis também estão ruins. O que são &#8220;c&#8221; e &#8220;dis&#8221;? Vamos supor que pelo menos os tipos estão corretos e seus valores não podem ser alterados, pois são conhecidos fora do método. A propósito, o que são esses &#8220;números cabalísticos&#8221; testados? Outra coisa que chama a atenção são os comentários <em>in-line</em>. Esse é o chamado &#8220;mau cheiro de código&#8221; e geralmente marca pontos candidatos a <em>refactoring</em>.</span></p>
<p><pre class="brush: java;">
public enum DiscountingCategory(){
     WITHOUT_DISCOUNTING,
     ESPECIAL_DISCOUNTING;
}

public enum CustomerType(){
    SMALL_FARM,
    BIG_FARM;
}

private DiscountingCategory findDiscountingCategory(CustomerType customerType){
     DiscountingCategory discountingCategory = WITHOUT_DISCOUNTING;
     if (customerType == BIG_FARM) {
         discountingCategory = ESPECIAL_DISCOUNTING;
     }
     return discountingCategory;
}
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Sinal verde: os testes passaram e agora as coisas fazem mais sentido. Troquei as constantes por tipos enumerados e alterei os nomes do parâmetro e das variáveis. Os &#8220;números cabalísticos&#8221; podem ser recuperados de fora pelo ordinal() do enumerado, ou seja, não modifiquei a dependência para os valores 0 e 1. Isso fica para o próximo refactoring. Acho que vou parar por aqui.</span></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;"><strong>Conclusão</strong></span></p>
<p><span class="Apple-style-span" style="font-family:Arial, sans-serif;">Em <a title="A Melhor Solução é a Simples" href="http://atitudereflexiva.wordpress.com/2009/11/04/a-melhor-solucao-e-a-simples" target="_blank">A Melhor Solução é a Simples</a>, citei uma passagem do livro Modelagem Ágil, de Scott W. Ambler. Nesse trecho, ele aponta os problemas decorrentes de se modelar demais para tentar resolver todos os problemas imagináveis. Portanto, não perca tempo inventando requisitos: pare quando a luz verde acender e seu código estiver claro o suficiente.</span></p>
<div class='embed-vimeo' style='text-align:center;'><iframe src='http://player.vimeo.com/video/24496096' width='400' height='300' frameborder='0'></iframe></div>
<br />Filed under: <a href='http://atitudereflexiva.wordpress.com/category/atitude/'>Atitude</a>, <a href='http://atitudereflexiva.wordpress.com/category/programacao/'>Programação</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atitudereflexiva.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atitudereflexiva.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atitudereflexiva.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atitudereflexiva.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atitudereflexiva.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atitudereflexiva.wordpress.com/411/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atitudereflexiva.wordpress.com/411/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atitudereflexiva.wordpress.com/411/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atitudereflexiva.wordpress.com&amp;blog=8094430&amp;post=411&amp;subd=atitudereflexiva&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atitudereflexiva.wordpress.com/2011/05/30/ame-teu-codigo-como-a-ti-mesmo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b6ec205035a57ccefcf059f2c5858822?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">rdomartins</media:title>
		</media:content>
	</item>
		<item>
		<title>SSH Com Chave Pública</title>
		<link>http://atitudereflexiva.wordpress.com/2011/02/13/ssh-com-chave-publica/</link>
		<comments>http://atitudereflexiva.wordpress.com/2011/02/13/ssh-com-chave-publica/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 12:16:47 +0000</pubDate>
		<dc:creator>Rodrigo Martins</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[chave pública e privada]]></category>
		<category><![CDATA[login automático]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://atitudereflexiva.wordpress.com/?p=382</guid>
		<description><![CDATA[Recentemente, decidimos utilizar a classe Robot do AWT em associação com o fest para automatizar os testes da interface gráfica. Falarei sobre a implementação do teste automatizado em outro artigo. Nesse artigo falarei sobre um problema que tive com a autenticação do SSH e como resolvi utilizando chave pública e privada. SSH Alguns módulos do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atitudereflexiva.wordpress.com&amp;blog=8094430&amp;post=382&amp;subd=atitudereflexiva&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Arial, sans-serif;font-size:13px;">Recentemente, decidimos utilizar a classe <a title="AWT Robot" href="http://download.oracle.com/javase/6/docs/api/java/awt/Robot.html" target="_blank">Robot</a> do AWT em associação com o <a title="fest" href="http://code.google.com/p/fest/" target="_blank">fest</a> para automatizar os testes da interface gráfica. Falarei sobre a implementação do teste automatizado em outro artigo. Nesse artigo falarei sobre um problema que tive com a autenticação do SSH e como resolvi utilizando chave pública e privada.</span></p>
<p><strong><span style="font-family:Arial, sans-serif;font-size:13px;">SSH</span></strong><br />
<span style="font-family:Arial, sans-serif;font-size:13px;"><br />
Alguns módulos do nosso sistema rodam em servidores remotos. Para que algumas ações possam ser realizadas por um usuário (no caso dos testes automatizados o usuário é o próprio Robot), outras ações &#8211; esplícitas, dependentes de terceiros ou dependentes de temporização &#8211; devem ocorrer nos servidores. Para simular as chamadas “ações de terceiros”, precisamos executar scripts nos servidores via SSH.</span><br />
<span style="font-family:Arial, sans-serif;font-size:13px;"><br />
O <a title="Secure Shell" href="http://en.wikipedia.org/wiki/Secure_Shell" target="_blank">SSH</a> (Secure Shell) é um protocolo de rede que permite a troca de dados entre dois dispositivos de rede através de um canal seguro. Servidores SSH necessitam de usuário e senha. Como nossos servidores utilizam um usuário fixo e os scripts que rodam lá dependem de permissões atribuídas a esse usuário, não seria a melhor escolha criar um usuário para cada desenvolvedor em cada servidor. Para emular um login automático, decidimos utilizar chave pública e privada. De acordo com a <a title="Chave Pública e Privada" href="http://pt.wikipedia.org/wiki/Criptografia_de_chave_p%C3%BAblica" target="_blank">wikipedia</a>:</span></p>
<blockquote><p><span style="font-family:Arial, sans-serif;font-size:13px;">A criptografia de chave pública ou criptografia assimétrica é um método de criptografia que utiliza um par de chaves: uma chave pública e uma chave privada. A chave pública é distribuída livremente, enquanto a chave privada deve ser conhecida apenas pelo seu dono.</span></p></blockquote>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Basicamente, quem detém a chave pública &#8211; criada no mesmo momento que a chave privada &#8211; pode acessar o dispositivo de rede, que é o detentor da chave privada.</span><br />
<span style="font-family:Arial, sans-serif;font-size:13px;"><br />
Abaixo, segue o processo para criação do par de chaves pública e privada. Não é necessário repetir esse processo para cada host remoto. Basta fazer apenas uma vez e copiar a chave privada para o diretório .ssh de cada host remoto. Detalhe: segurança não é nosso objetivo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</span></p>
<p><strong><span style="font-family:Arial, sans-serif;font-size:13px;">Passos Para Criação das Chaves Pública e Privada</span></strong><br />
<span style="font-family:Arial, sans-serif;font-size:13px;"><em> </em></span></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;"><em>1. Autenticar no ssh server</em></span></p>
<p><pre class="brush: bash;">
$ ssh -l [USER] [HOST_NAME]
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;"><em>2. Criar o par de chaves pública/privada</em></span></p>
<p><pre class="brush: bash;">
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/atc/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/atc/.ssh/id_rsa
Your public key has been saved in /home/atc/.ssh/id_rsa.pub
$ cd ~/.ssh
$ cat id_rsa.pub &gt;&gt; authorized_keys
$ chmod 600 authorized_keys
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Obs.: Não utilize passphrase.</span><br />
<span style="font-family:Arial, sans-serif;font-size:13px;"><em> </em></span></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;"><em>3. Faça log out e crie, caso não exista, o diretório .ssh</em></span></p>
<p><pre class="brush: bash;">
$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;"><em>4. Copie o arquivo id_rsa gerado no servidor para o diretório local .ssh</em></span></p>
<p><pre class="brush: bash;">
$ cd ~/.ssh
$ rcp atc@[HOST_NAME]:/home/atc/.ssh/id_rsa .
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;"><em>5. Faça o login via ssh</em></span></p>
<p><pre class="brush: bash;">
$ ssh -l [USER] [HOST_NAME]
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Agora não é mais necessário fornecer o password.</span></p>
<p><strong><span style="font-family:Arial, sans-serif;font-size:13px;">Resolvendo Problemas</span></strong></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Caso você enfrente algum problema, faça a autenticação em modo debugg para ter o mínimo de informações:</span></p>
<p><pre class="brush: bash;">
$ ssh -v -l [USER] [HOST_NAME]
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Caso esteja tudo certo, algo assim será exibido no terminal:<br />
</span></p>
<p><pre class="brush: bash;">
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering public key: /Users/res/.ssh/res-rsa
debug1: Server accepts key: pkalg ssh-rsa blen 151
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type
Enter passphrase for key '/Users/res/.ssh/res-rsa':
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
</pre></p>
<p><span style="font-family:Arial, sans-serif;font-size:13px;">Enfrentei dois problemas na primeira vez em que tentei gerar as chaves: falta da permissão 700 no diretório .ssh do servidor e falta da permissão 600 no conteúdo do diretório .ssh. No processo para criação das chaves já coloquei os passos para alteração de permissão.</span></p>
<p><strong><span style="font-family:Arial, sans-serif;font-size:13px;">Referências</span></strong><br />
<span style="font-family:Arial, sans-serif;font-size:13px;"><br />
<a href="http://www.snailbook.com/faq/publickey-userauth.auto.html" target="_blank">http://www.snailbook.com/faq/publickey-userauth.auto.html</a><br />
<a href="http://magicmonster.com/kb/net/ssh/auto_login.html" target="_blank"> http://magicmonster.com/kb/net/ssh/auto_login.html</a><br />
<a href="http://www.linuxquestions.org/questions/linux-security-4/ssh-public-private-key-authentication-problems-454445/" target="_blank"> http://www.linuxquestions.org/questions/linux-security-4/ssh-public-private-key-authentication-problems-454445/</a></span></p>
<br />Filed under: <a href='http://atitudereflexiva.wordpress.com/category/programacao/'>Programação</a> Tagged: <a href='http://atitudereflexiva.wordpress.com/tag/chave-publica-e-privada/'>chave pública e privada</a>, <a href='http://atitudereflexiva.wordpress.com/tag/login-automatico/'>login automático</a>, <a href='http://atitudereflexiva.wordpress.com/tag/ssh/'>ssh</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/atitudereflexiva.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/atitudereflexiva.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/atitudereflexiva.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/atitudereflexiva.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/atitudereflexiva.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/atitudereflexiva.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/atitudereflexiva.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/atitudereflexiva.wordpress.com/382/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=atitudereflexiva.wordpress.com&amp;blog=8094430&amp;post=382&amp;subd=atitudereflexiva&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://atitudereflexiva.wordpress.com/2011/02/13/ssh-com-chave-publica/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b6ec205035a57ccefcf059f2c5858822?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">rdomartins</media:title>
		</media:content>
	</item>
	</channel>
</rss>
