<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jaeyson Anthony Y.</title>
    <description>The latest articles on DEV Community by Jaeyson Anthony Y. (@jaeyson).</description>
    <link>https://dev.to/jaeyson</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F130400%2F36a18dd1-d4e0-450c-806f-6ad3f35b2bf3.jpg</url>
      <title>DEV Community: Jaeyson Anthony Y.</title>
      <link>https://dev.to/jaeyson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaeyson"/>
    <language>en</language>
    <item>
      <title>Simple way to send Github events to a Discord channel using webhook</title>
      <dc:creator>Jaeyson Anthony Y.</dc:creator>
      <pubDate>Sat, 27 Nov 2021 10:37:25 +0000</pubDate>
      <link>https://dev.to/jaeyson/simple-way-to-send-github-events-to-a-discord-channel-using-webhook-naj</link>
      <guid>https://dev.to/jaeyson/simple-way-to-send-github-events-to-a-discord-channel-using-webhook-naj</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can create a test server to try this out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create or select a text channel you want to send the events (e.g. &lt;code&gt;general&lt;/code&gt;), mine's in &lt;code&gt;github-webhook&lt;/code&gt; channel:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdu5rlxzr9hcwwcasqm9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdu5rlxzr9hcwwcasqm9g.png" alt="discord create a channel" width="800" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to channel's settings (gear icon) &lt;code&gt;&amp;gt;&lt;/code&gt; Integrations &lt;code&gt;&amp;gt;&lt;/code&gt; Webhooks &lt;code&gt;&amp;gt;&lt;/code&gt; New Webhook &lt;code&gt;&amp;gt;&lt;/code&gt; Copy Webhook URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7466xfwzzjleh3rj980d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7466xfwzzjleh3rj980d.png" alt="channel settings via gear icon" width="559" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihlt509rxgi4rcao1d7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihlt509rxgi4rcao1d7i.png" alt="create webhook inside channel settings" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuywze9erwqsrn4a2fgkh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuywze9erwqsrn4a2fgkh.png" alt="copy webhook URL" width="734" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go to your repo's settings &lt;code&gt;&amp;gt;&lt;/code&gt; Webhooks &lt;code&gt;&amp;gt;&lt;/code&gt; Add webhook&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paste the webhook URL to &lt;code&gt;Payload URL&lt;/code&gt;, make sure to append &lt;code&gt;/github&lt;/code&gt;. You can choose which event(s) to listen. For this example I set it to &lt;code&gt;Send me everything.&lt;/code&gt;:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqj9gt3yh1fswwpythvau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqj9gt3yh1fswwpythvau.png" alt="payload URL" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proof:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fid7ybe0hz77t5u4dunu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fid7ybe0hz77t5u4dunu9.png" alt="github repo" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq39uxp0mfjxigtiml482.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq39uxp0mfjxigtiml482.png" alt="discord channel" width="792" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>discord</category>
      <category>webhook</category>
    </item>
    <item>
      <title>AWS S3 CLI docker for the impatient (also wasabi)</title>
      <dc:creator>Jaeyson Anthony Y.</dc:creator>
      <pubDate>Mon, 26 Oct 2020 13:44:05 +0000</pubDate>
      <link>https://dev.to/jaeyson/aws-s3-cli-docker-for-the-impatient-also-wasabi-1dg5</link>
      <guid>https://dev.to/jaeyson/aws-s3-cli-docker-for-the-impatient-also-wasabi-1dg5</guid>
      <description>&lt;p&gt;What's the problem with &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html" rel="noopener noreferrer"&gt;AWS cli guide&lt;/a&gt; (it has good docs anyway)? well, nothing really complex unless you really want to use it asap. This is more of a basic setup and quick run using docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;0. Things needed: Docker and AWS S3 creds (access key id/secret access key)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There's a &lt;a href="https://docs.docker.com/engine/install" rel="noopener noreferrer"&gt;guide for linux distro&lt;/a&gt;, and a &lt;a href="https://docs.docker.com/engine/install/linux-postinstall" rel="noopener noreferrer"&gt;post-installation steps to run Docker as non-root&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Pull Docker image&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image pull amazon/aws-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;2. Make credentials&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;~/.aws&lt;/code&gt; dir if not exists, then inside that dir create a file &lt;code&gt;credentials&lt;/code&gt; and &lt;code&gt;config&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.aws/credentials&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="err"&gt;[default]&lt;/span&gt;
&lt;span class="nv"&gt;aws_access_key_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fffff3333ff55555GGGG
&lt;span class="nv"&gt;aws_secret_access_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;kkkkkkkkkkkkkkkeeeeeeeeeeeeeyyyyyyyyyyyy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;~/.aws/config&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="err"&gt;[default]&lt;/span&gt;
&lt;span class="nv"&gt;region&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;us-west-2
&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or&lt;/strong&gt; use an &lt;em&gt;interactive&lt;/em&gt; setup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# interactive setup for creds&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli &lt;span class="se"&gt;\&lt;/span&gt;
  configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check creds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli &lt;span class="se"&gt;\&lt;/span&gt;
  configure

&lt;span class="c"&gt;# or view&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.aws/credentials
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;3. &lt;code&gt;cp&lt;/code&gt; copy, &lt;code&gt;sync&lt;/code&gt; , &lt;code&gt;mv&lt;/code&gt; move and &lt;code&gt;ls&lt;/code&gt; list files&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;3.a. &lt;code&gt;cp&lt;/code&gt; copy command&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;$ aws s3 cp &amp;lt;source&amp;gt; &amp;lt;target&amp;gt; [--options]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;source&lt;/code&gt; could mean your files from your computer or from &lt;code&gt;S3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add &lt;code&gt;--recursive&lt;/code&gt; option if dir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# upload a local file hyena.png (current dir) to mammals dir&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;cp &lt;/span&gt;hyena.png &lt;span class="se"&gt;\&lt;/span&gt;
  s3://animal-bucket/mammals/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# download lynx.png from s3 to current dir&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/aws amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;cp &lt;/span&gt;s3://animal-bucket/mammals/lynx.png ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# upload all contents from reptiles dir (local) to s3&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/aws amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;cp &lt;/span&gt;reptiles/ s3://animal-bucket/reptiles/ &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--recursive&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;3.b &lt;code&gt;ls&lt;/code&gt; command&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# list all files in reptiles dir&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;ls &lt;/span&gt;s3://animal-bucket/reptiles/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e.g. get the size of a bucket&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;ls &lt;/span&gt;s3://animal-bucket/ &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--summarize&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--human-readable&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--recursive&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; profile-name &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--endpoint-url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://s3.&amp;lt;region&amp;gt;.&amp;lt;provider&amp;gt;.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;3.c &lt;code&gt;sync&lt;/code&gt; command&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;aws s3 sync &amp;lt;source&amp;gt; &amp;lt;target&amp;gt; [--options]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Using &lt;code&gt;cp&lt;/code&gt; will require the &lt;code&gt;--recursive&lt;/code&gt; option to copy multiple files in a dir, while &lt;code&gt;sync&lt;/code&gt; command will, by default, copy a whole directory. It will only copy new/modified files.&lt;/p&gt;

&lt;p&gt;Add &lt;code&gt;--delete&lt;/code&gt; option to remove &lt;code&gt;&amp;lt;target&amp;gt;&lt;/code&gt; files that aren't in &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; dir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# using new-reptiles folder as basis&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sync &lt;/span&gt;new-reptiles/ s3://animal-bucket/old-reptiles/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;3.c &lt;code&gt;mv&lt;/code&gt; move command&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;aws s3 mv &amp;lt;source&amp;gt; &amp;lt;target&amp;gt; [--options]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Only markdown files are moved from new-reptiles&lt;/span&gt;
&lt;span class="c"&gt;# to animal-bucket/old-reptiles. The rest aren't included.&lt;/span&gt;

docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;mv &lt;/span&gt;s3://new-reptiles/ s3://animal-bucket/old-reptiles/ &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--recursive&lt;/span&gt; &lt;span class="nt"&gt;--exclude&lt;/span&gt; &lt;span class="s2"&gt;"*"&lt;/span&gt; &lt;span class="nt"&gt;--include&lt;/span&gt; &lt;span class="s2"&gt;"*.md"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; wasabi &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--endpoint-url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://s3.&amp;lt;region&amp;gt;.&amp;lt;provider&amp;gt;.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rest of the commands can be found in their &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Using another cloud storage (&lt;code&gt;ie&lt;/code&gt; Wasabi)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Same thing with step 2:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.aws/credentials&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="err"&gt;[default]&lt;/span&gt;
&lt;span class="nv"&gt;aws_access_key_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;fffff3333ff55555GGGG
&lt;span class="nv"&gt;aws_secret_access_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;kkkkkkkkkkkkkkkeeeeeeeeeeeeeyyyyyyyyyyyy
&lt;span class="err"&gt;[wasabi]&lt;/span&gt;
&lt;span class="nv"&gt;aws_access_key_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wwwaaasssaaabbbiiiii
&lt;span class="nv"&gt;aws_secret_access_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wwwwwwwaaaaaassssssaaaaaabbbbbbbiiiiiiii
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;~/.aws/config&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="err"&gt;[default]&lt;/span&gt;
&lt;span class="nv"&gt;region&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;us-west-2
&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json
&lt;span class="err"&gt;[wasabi]&lt;/span&gt;
&lt;span class="nv"&gt;region&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;us-east-1
&lt;span class="nv"&gt;output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or&lt;/strong&gt; use an &lt;em&gt;interactive&lt;/em&gt; setup. Notice I added &lt;code&gt;--profile &amp;lt;PROFILE_NAME&amp;gt;&lt;/code&gt; option:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# interactive setup for creds&lt;/span&gt;
docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli &lt;span class="se"&gt;\&lt;/span&gt;
  configure &lt;span class="nt"&gt;--profile&lt;/span&gt; wasabi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check creds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli &lt;span class="se"&gt;\&lt;/span&gt;
  configure &lt;span class="nt"&gt;--profile&lt;/span&gt; wasabi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Doing some commands (with &lt;code&gt;--profile&lt;/code&gt; and &lt;code&gt;--endpoint-url&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli s3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;ls &lt;/span&gt;s3://wasabi-bucket/ &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--profile&lt;/span&gt; wasabi &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--endpoint-url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://s3.us-west-2.wasabisys.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shorten the command with &lt;code&gt;alias&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;docker container run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; ~/.aws:/root/.aws &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:/aws &lt;span class="se"&gt;\&lt;/span&gt;
  amazon/aws-cli&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Errors
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;An error occurred (NoSuchTagSetError) when calling the GetObjectTagging operation: There is no tag set associated with the bucket.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you came across this error while using &lt;code&gt;sync&lt;/code&gt;, a fix could be either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grant the &lt;code&gt;s3:GetObjectTagging&lt;/code&gt; permission to that user, or&lt;/li&gt;
&lt;li&gt;adding this option &lt;code&gt;--copy-props metadata-directive&lt;/code&gt; (it tells the cli not to get source object tags).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;source can be found &lt;a href="https://github.com/aws/aws-cli/issues/5375#issuecomment-740354629" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>s3</category>
      <category>wasabi</category>
      <category>aws</category>
      <category>docker</category>
    </item>
    <item>
      <title>how to remap broken keys with Xmodmap</title>
      <dc:creator>Jaeyson Anthony Y.</dc:creator>
      <pubDate>Sun, 25 Oct 2020 03:51:40 +0000</pubDate>
      <link>https://dev.to/jaeyson/how-to-remap-broken-keys-with-xmodmap-48ck</link>
      <guid>https://dev.to/jaeyson/how-to-remap-broken-keys-with-xmodmap-48ck</guid>
      <description>&lt;p&gt;We can use &lt;code&gt;Xmodmap&lt;/code&gt; instead of installing yet-another-tool for remapping keys, ie your &lt;code&gt;r&lt;/code&gt; or &lt;code&gt;v&lt;/code&gt; died and you want to use a spare &lt;code&gt;CapsLock + &amp;lt;key&amp;gt;&lt;/code&gt; to trigger that dead key.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a file &lt;code&gt;~/.Xmodmap&lt;/code&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch&lt;/span&gt; ~/.Xmodmap &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; vim &amp;amp;_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's my example how to remap keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;! keycode 66 is caps lock
keycode 66 = Mode_switch
keysym h = h H Left
keysym l = l L Right
keysym k = k K Up
keysym j = j J Down
keysym q = q Q z
keysym w = w W x
keysym e = e E c
keysym r = r R v
keysym i = i I Insert
keysym g = g G Home
keysym b = b B End

! ^: asciicircum, |: bar
keysym f = f F asciicircum bar

! u: Page Up, d: Page Down
keysym u = u U Prior
keysym d = d D Next

keysym BackSpace = BackSpace BackSpace Delete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if you want to find a specific key like caps lock:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# press any key to get the key code&lt;/span&gt;
&lt;span class="c"&gt;# after running this command:&lt;/span&gt;
xev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmpuzzvkqm8x69zyxy7me.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmpuzzvkqm8x69zyxy7me.png" alt="xmodmap" width="800" height="640"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Then add these to &lt;code&gt;~/.zshrc&lt;/code&gt; or &lt;code&gt;~/.bashrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#you may logout to see changes&lt;/span&gt;
xmodmap ~/.Xmodmap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>xmodmap</category>
      <category>linux</category>
      <category>remapkeys</category>
    </item>
    <item>
      <title>how to mount another drive and install updates</title>
      <dc:creator>Jaeyson Anthony Y.</dc:creator>
      <pubDate>Sun, 25 Oct 2020 02:59:08 +0000</pubDate>
      <link>https://dev.to/jaeyson/how-to-mount-another-drive-and-install-updates-if9</link>
      <guid>https://dev.to/jaeyson/how-to-mount-another-drive-and-install-updates-if9</guid>
      <description>&lt;p&gt;Few months ago my 9-year-old motherboard died of natural cause, leaving my ssd drive (ubuntu 18) and the rest of parts working. How can I install updates to it?&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Check mount point of [external] drive
&lt;/h4&gt;

&lt;p&gt;If you don't see a mount point of your external drive (e.g. /dev/sdc1)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# either check the mount points via&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;lsblk &lt;span class="nt"&gt;-f&lt;/span&gt;

&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;fdisk &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftq8vtr2fhz2bvrcw5skj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftq8vtr2fhz2bvrcw5skj.png" alt="lsblk" width="800" height="245"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Mine's showing &lt;code&gt;/dev/sdc1&lt;/code&gt; so we'll use that as mount point example. Otherwise skip step 1&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Mount drive (sudoer user)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mount /dev/sdc1 /mnt

&lt;span class="c"&gt;# bind&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount &lt;span class="nt"&gt;--bind&lt;/span&gt; /dev /mnt/dev
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount &lt;span class="nt"&gt;--bind&lt;/span&gt; /sys /mnt/sys
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount &lt;span class="nt"&gt;--bind&lt;/span&gt; /proc /mnt/proc
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount &lt;span class="nt"&gt;--bind&lt;/span&gt; /run /mnt/run

&lt;span class="nb"&gt;sudo chroot&lt;/span&gt; /mnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Install updates
&lt;/h4&gt;

&lt;p&gt;Add &lt;code&gt;-S&lt;/code&gt; for reading standard input instead of &lt;code&gt;/dev/tty&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp7j29fg10kpyf41fnb5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp7j29fg10kpyf41fnb5x.png" alt="mount" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>mount</category>
    </item>
    <item>
      <title>Add non-sudoer user with ssh access to a specific directory</title>
      <dc:creator>Jaeyson Anthony Y.</dc:creator>
      <pubDate>Sat, 24 Oct 2020 16:52:47 +0000</pubDate>
      <link>https://dev.to/jaeyson/add-non-sudoer-user-with-ssh-access-to-a-specific-directory-5cdb</link>
      <guid>https://dev.to/jaeyson/add-non-sudoer-user-with-ssh-access-to-a-specific-directory-5cdb</guid>
      <description>&lt;p&gt;Suppose you want to add another public key (&lt;code&gt;id_rsa.pub&lt;/code&gt;) on an existing non-sudoer user, e.g. &lt;code&gt;ftpuser&lt;/code&gt; for your teammate or another machine that you'll &lt;code&gt;ssh&lt;/code&gt;ing often and you want this user to have access to a specific dir. In this example we'll use &lt;code&gt;/var/www/html&lt;/code&gt; as the specific dir, also I'm using ubuntu as an example server.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. (optional) where's the home dir of &lt;code&gt;userA&lt;/code&gt;?
&lt;/h4&gt;

&lt;p&gt;If for some odd reason your non-sudoer user has a different home directory like &lt;code&gt;/var/www/html&lt;/code&gt;, you may want to move it back to its default dir and symlinking it instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# server&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; /home/userA userA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. create &lt;code&gt;.ssh&lt;/code&gt; dir and &lt;code&gt;authorized_keys&lt;/code&gt; file if not exists
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# server&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; /home/userA/.ssh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;700 &lt;span class="nv"&gt;$_&lt;/span&gt;
&lt;span class="nb"&gt;touch &lt;/span&gt;authorized_keys &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod &lt;/span&gt;600 &lt;span class="nv"&gt;$_&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. symlink a directory (e.g. &lt;code&gt;/var/www/html&lt;/code&gt;)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# server&lt;/span&gt;
&lt;span class="c"&gt;# ln -s /var/www/html /home/userA/link_name&lt;/span&gt;
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /var/www/html /home/userA/www
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. &lt;code&gt;authorized_keys&lt;/code&gt; file in &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;This is where we read keys that are authorized to log in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# server&lt;/span&gt;
&lt;span class="c"&gt;# add/update this line accordingly&lt;/span&gt;
AuthorizedKeysFile /home/old_user/.ssh/authorized_keys  /home/userA/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then restart it with &lt;code&gt;sudo service sshd restart&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  5. add client's public key (&lt;code&gt;id_rsa&lt;/code&gt; file) to server:
&lt;/h4&gt;

&lt;p&gt;let's check if we have keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# client&lt;/span&gt;
&lt;span class="c"&gt;# check if there's any keys exists&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-al&lt;/span&gt; ~/.ssh

&lt;span class="c"&gt;# otherwise create one&lt;/span&gt;
&lt;span class="c"&gt;# for the rsa file you could&lt;/span&gt;
&lt;span class="c"&gt;# name it like userA_id_rsa&lt;/span&gt;
ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your comment"&lt;/span&gt;

&lt;span class="c"&gt;# start in background&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# adds key to ssh-agent, it'll ask for passphrase&lt;/span&gt;
ssh-add ~/.ssh/userA_id_rsa

&lt;span class="c"&gt;# copy public key to authorized_keys in server&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/userA_id_rsa | ssh sudouser@host.domain &lt;span class="nt"&gt;-vvv&lt;/span&gt; &lt;span class="s2"&gt;"cat - &amp;gt;&amp;gt; /home/userA/.ssh/authorized_keys"&lt;/span&gt;

&lt;span class="c"&gt;# or if the sudo user uses key for loggin in&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/userA_id_rsa | ssh sudouser@host.domain &lt;span class="nt"&gt;-vvv&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/sudouser_id_rsa &lt;span class="s2"&gt;"cat - &amp;gt;&amp;gt; /home/userA/.ssh/authorized_keys"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6. then log in:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;userA@host.domain &lt;span class="nt"&gt;-vvv&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/userA_id_rsa

&lt;span class="c"&gt;# remember step 3 symlink?&lt;/span&gt;
&lt;span class="c"&gt;# once logged in successfully, confirm if&lt;/span&gt;
&lt;span class="c"&gt;# you can see /var/www/html in your home dir:&lt;/span&gt;
&lt;span class="c"&gt;# ls -la ~/home/userA/link_name&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; ~/home/userA/www
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  saving ssh config
&lt;/h4&gt;

&lt;p&gt;have some ssh config handy (&lt;code&gt;~/.ssh/config&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Host userA.domain
  HostName host.domain
  User userA
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/userA_id_rsa
  IdentitiesOnly &lt;span class="nb"&gt;yes
  &lt;/span&gt;RemoteForward 52698 localhost: 52698
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then log in &lt;code&gt;ssh userA.domain -vvv&lt;/code&gt;&lt;/p&gt;

</description>
      <category>ssh</category>
      <category>linux</category>
      <category>vps</category>
    </item>
  </channel>
</rss>
