---
title: "Git SSH Keys for GitHub, GitLab, and Bitbucket on Windows"
lang: "en"
author: "Mohammad Abu Mattar"
canonical: https://mkabumattar.com/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows
---

![Blog post image for Git SSH Keys for GitHub, GitLab, and Bitbucket on Windows - Git talks to remotes over HTTPS by default, so it asks for your username and password on every git pull or git push. GitHub, GitLab, and Bitbucket all let Git authenticate over SSH with a public key instead. Here is how to generate a key on Windows, add it to each service, and stop typing credentials for every Git command.](/_astro/hero.CT0gfesP_8ynSw.webp)

[Home](/)›[Blog](/blog)›[All Categories](/blog/categories)›[Git](/blog/categories/git)

Blog

[Prev in GitGit SSH Keys for GitHub, GitLab, and Bitbucket on Linux](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-linux)

[Git](/blog/categories/git)[SSH](/blog/categories/ssh)[Windows](/blog/categories/windows)[Version Control](/blog/categories/version-control)[Security](/blog/categories/security)[Developer Tools](/blog/categories/developer-tools)

# Git SSH Keys for GitHub, GitLab, and Bitbucket on Windows

[Mohammad Abu Mattar](/authors/mohammad-abu-mattar)Published: 22 Oct 2022Updated: 07 Jun 202606 Mins read10 Mins listen

[Markdown for AI(opens in a new tab)](/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/index.md "Open the plain-Markdown version of this page, for pasting into an AI tool")

TL;DR

Git talks to remotes over HTTPS by default, so it asks for your username and password on every git pull or git push. GitHub, GitLab, and Bitbucket all let Git authenticate over SSH with a public key instead. Here is how to generate a key on Windows, add it to each service, and stop typing credentials for every Git command.

Series

[Git SSH Keys Setup](/series/git-ssh-keys-setup)2/2

[PreviousGit SSH Keys for GitHub, GitLab, and Bitbucket on Linux](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-linux)

All posts in this series (2)

Blog2

1.  [Git SSH Keys for GitHub, GitLab, and Bitbucket on Linux](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-linux)
2.  [Git SSH Keys for GitHub, GitLab, and Bitbucket on WindowsYou are here](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows)

### Git SSH Keys for GitHub, GitLab, and Bitbucket on Windows

Contents

[Introduction](#introduction)[Make sure Git is installed](#make-sure-git-is-installed)[Generate SSH keys](#generate-ssh-keys)[Add the public SSH key to your account](#add-the-public-ssh-key-to-your-account)[Test connecting via SSH](#test-connecting-via-ssh)[Frequently Asked Questions](#frequently-asked-questions)[References](#references)

## [Introduction](#introduction)

By default, Git talks to remotes over HTTPS, so it asks for your username and password on every `git pull` or `git push`. SSH fixes that. GitHub, GitLab, and Bitbucket all let Git authenticate over SSH with public-key encryption instead. Set it up once and you stop typing credentials for every Git command.

Worth knowing

An SSH key is a pair of files: a **private key** that never leaves your machine, and a **public key** you upload to each service. Authentication works by proving you hold the private key. No password travels over the network.

## [Make sure Git is installed](#make-sure-git-is-installed)

Before you start, check whether Git is already on your machine. Run this in Windows Terminal (or PowerShell):

Terminal window

```
1git --version
```

If you get a version number back, you’re set. Skip to [Generate SSH keys](#generate-ssh-keys). If the command isn’t found, install Git using whichever method you prefer.

-   [Official installer](#tab-panel-39)
-   [Chocolatey](#tab-panel-40)
-   [Winget](#tab-panel-41)

1.  Download the latest **Git for Windows** from the official site.
2.  Run the installer. The defaults are sensible. Clicking **Next** through each screen is fine for most setups, including the editor, line-ending, and terminal choices.
3.  Click **Install**, then **Finish**.
4.  Open a new terminal and confirm it worked:

Terminal window

```
1git --version
```

Terminal window

```
1choco install git -y
```

Then confirm the install:

Terminal window

```
1git --version
```

Terminal window

```
1winget install --id Git.Git -e
```

Then confirm the install:

Terminal window

```
1git --version
```

Note

After installing Git, set your global name and email. Every commit you make is stamped with them:

Terminal window

```
1git config --global user.name 'USERNAME'2git config --global user.email 'YOUR_EMAIL@EXAMPLE.COM'
```

## [Generate SSH keys](#generate-ssh-keys)

Open Windows Terminal and generate a new key pair, replacing `YOUR_EMAIL@EXAMPLE.COM` with your email address. **Use Ed25519.** It’s what GitHub, GitLab, and Bitbucket recommend today. Reach for RSA only on an older system or server that doesn’t support Ed25519.

-   [Ed25519 (recommended)](#tab-panel-42)
-   [RSA (legacy)](#tab-panel-43)

Terminal window

```
1ssh-keygen -t ed25519 -C "YOUR_EMAIL@EXAMPLE.COM"
```

This creates `.ssh\id_ed25519` (private) and `.ssh\id_ed25519.pub` (public) in your user folder. Ed25519 keys are small and fast, with security on par with a 4096-bit RSA key.

Terminal window

```
1ssh-keygen -t rsa -b 4096 -C "YOUR_EMAIL@EXAMPLE.COM"
```

This creates `.ssh\id_rsa` (private) and `.ssh\id_rsa.pub` (public). Use the older RSA type only if you need to talk to a legacy system or server that doesn’t support Ed25519.

After running the command, complete the prompts:

1.  Choose where to save the private key. Press Enter to accept the default location (`C:\Users\you\.ssh\id_ed25519`, or `id_rsa` for an RSA key):

Terminal window

```
1Enter file in which to save the key (/c/Users/you/.ssh/id_ed25519): [Press Enter]
```

2.  If a key already exists, you’ll be asked whether to overwrite it. Type `y` and press Enter:

Terminal window

```
1Overwrite (y/n)?
```

3.  Enter and re-enter a passphrase (think of it as a password for the key):

Terminal window

```
1Enter passphrase (empty for no passphrase): [Type a passphrase]2Enter same passphrase again: [Type passphrase again]
```

Tip

A passphrase encrypts your private key on disk, so a stolen key file is useless without it. On Windows you can have the OpenSSH Authentication Agent remember it for you (see the FAQ below) so you only type it once.

The whole interaction should look like this:

-   [Ed25519 (recommended)](#tab-panel-44)
-   [RSA (legacy)](#tab-panel-45)

Terminal window

```
1Generating public/private ed25519 key pair.2Enter file in which to save the key (/c/Users/you/.ssh/id_ed25519):3Created directory '/c/Users/you/.ssh'.4Enter passphrase (empty for no passphrase):5Enter same passphrase again:6Your identification has been saved in /c/Users/you/.ssh/id_ed25519.7Your public key has been saved in /c/Users/you/.ssh/id_ed25519.pub.8The key fingerprint is:9SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx YOUR_EMAIL@EXAMPLE.COM
```

Terminal window

```
1Generating public/private rsa key pair.2Enter file in which to save the key (/c/Users/you/.ssh/id_rsa):3Created directory '/c/Users/you/.ssh'.4Enter passphrase (empty for no passphrase):5Enter same passphrase again:6Your identification has been saved in /c/Users/you/.ssh/id_rsa.7Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.8The key fingerprint is:9SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx YOUR_EMAIL@EXAMPLE.COM
```

Confirm the key landed in your `.ssh` folder:

Terminal window

```
1Get-ChildItem .\.ssh\
```

A typical `.ssh` folder looks like this:

-   Directory.ssh/
    
    -   **id\_ed25519** Ed25519 private key, never share this
    -   **id\_ed25519.pub** Ed25519 public key, safe to upload
    -   **id\_rsa** RSA private key (legacy), never share this
    -   **id\_rsa.pub** RSA public key (legacy), safe to upload
    -   known\_hosts
    -   config
    

## [Add the public SSH key to your account](#add-the-public-ssh-key-to-your-account)

Copy your public key to the clipboard with PowerShell. Pick the tab that matches the key type you created:

-   [Ed25519 (recommended)](#tab-panel-37)
-   [RSA (legacy)](#tab-panel-38)

Terminal window

```
1Get-Content .\.ssh\id_ed25519.pub | Set-Clipboard
```

Terminal window

```
1Get-Content .\.ssh\id_rsa.pub | Set-Clipboard
```

Careful here

Only ever copy and paste the **public** key (the `.pub` file). The private key (`id_ed25519` or `id_rsa`, with no extension) must never be uploaded or shared with anyone.

Now add that public key to your account. Pick your service below:

-   [GitHub](#tab-panel-34)
-   [GitLab](#tab-panel-35)
-   [Bitbucket](#tab-panel-36)

Sign in to your GitHub account at github.com. Click your profile photo in the upper-right corner, then **Settings**:

![GitHub Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/github1.png)

Select **SSH and GPG keys** from the sidebar, then **New SSH key**. Give it a descriptive title (for example, your computer’s name) and paste your public key into the Key field. Click **Add SSH key**:

![GitHub Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/github2.png)

The key now appears in the list of SSH keys on your account:

![GitHub Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/github3.png)

Sign in to your GitLab account at gitlab.com. Click your profile photo in the upper-right corner, then **Settings**:

![GitLab Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/gitlab1.png)

Click **SSH Keys** in the sidebar and paste your public key into the Key field. Add a descriptive title (for example, the name of your computer), then click **Add key**:

![GitLab Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/gitlab2.png)

The key now appears in the list of SSH keys on your account:

![GitLab Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/gitlab3.png)

Log in to your Bitbucket account at bitbucket.org. Click your profile photo in the lower-left corner, then **Bitbucket settings**:

![Bitbucket Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/bitbucket1.png)

Find **SSH keys** under the Security section, then select **Add key**. Add a descriptive label (such as your computer’s name) and paste your public key into the Key field. Click **Add key**:

![Bitbucket Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/bitbucket2.png)

The key has now been added to your account’s list of SSH keys:

![Bitbucket Settings](/assets/blog/0010-git-ssh-keys-for-github-gitlab-and-bitbucket-on-windows/bitbucket3.png)

## [Test connecting via SSH](#test-connecting-via-ssh)

Before you start using SSH with Git, all three services let you check that the connection works.

-   [GitHub](#tab-panel-46)
-   [GitLab](#tab-panel-47)
-   [Bitbucket](#tab-panel-48)

Once you’ve added your SSH key to your GitHub account, open the terminal and type:

Terminal window

```
1ssh -T git@github.com
```

If you’re connecting to GitHub over SSH for the first time, the SSH client will ask if you trust the GitHub server’s public key:

Terminal window

```
1The authenticity of host 'github.com (140.82.113.4)' can't be established.2RSA key fingerprint is SHA256:a5d6c20b1790b4c144b9d26c9b201bbee3797aa010f2701c09c1b3a6262d2c02.3Are you sure you want to continue connecting (yes/no)?
```

Type `yes` and press Enter. GitHub is added to your known hosts and won’t prompt again:

Terminal window

```
1Warning: Permanently added 'github.com,140.82.113.4' (RSA) to the list of known hosts.
```

GitHub only allows this SSH connection for testing, not shell access, so it confirms you’re authenticated and then closes the connection:

Terminal window

```
1Hi YOUR_USER_NAME! You've successfully authenticated, but GitHub does not provide shell access.
```

The whole interaction should look something like this:

Terminal window

```
1ssh -T git@github.com2
3The authenticity of host 'github.com (140.82.113.4)' can't be established.4RSA key fingerprint is SHA256:a5d6c20b1790b4c144b9d26c9b201bbee3797aa010f2701c09c1b3a6262d2c02.5Are you sure you want to continue connecting (yes/no)? yes6Warning: Permanently added 'github.com,140.82.113.4' (RSA) to the list of known hosts.7Hi your_user_name! You've successfully authenticated, but GitHub does not provide shell access.
```

Test passed. You’re ready to use SSH with GitHub.

Once you’ve added your SSH key to your GitLab account, the test is pretty similar:

Terminal window

```
1ssh -T git@gitlab.com2
3The authenticity of host 'gitlab.com (35.231.145.151)' can't be established.4ECDSA key fingerprint is SHA256:4ac7a7fd4296d5e6267c9188346375ff78f6097a802e83c0feaf25277c9e70cc.5Are you sure you want to continue connecting (yes/no)? yes6Warning: Permanently added 'gitlab.com,35.231.145.151' (ECDSA) to the list of known hosts.7Welcome to GitLab, @YOUR_USER_NAME!
```

Test passed. You’re ready to use SSH with GitLab.

Once you’ve added your SSH key to your Bitbucket account, the test is pretty similar:

Terminal window

```
1ssh -T git@bitbucket.org2
3The authenticity of host 'bitbucket.org (104.192.143.1)' can't be established.4RSA key fingerprint is SHA256:fb7d37d5497c43f73325e0a98638cac8dda3b01a8c31f4ee11e2e953c19e0252.5Are you sure you want to continue connecting (yes/no)? yes6Warning: Permanently added 'bitbucket.org,104.192.143.1' (RSA) to the list of known hosts.7logged in as YOUR_USER_NAME.8
9You can use git or hg to connect to Bitbucket. Shell access is disabled.
```

Test passed. You’re ready to use SSH with Bitbucket.

## [Frequently Asked Questions](#frequently-asked-questions)

Use the built-in OpenSSH Authentication Agent. In an **admin** PowerShell, enable and start the service, then add your key:

Terminal window

```
1Get-Service ssh-agent | Set-Service -StartupType Automatic2Start-Service ssh-agent3ssh-add $HOME\.ssh\id_ed25519
```

The agent keeps the decrypted key in memory, so you type the passphrase once per login instead of on every Git command.

Use `ed25519`. The keys are smaller and faster than RSA with comparable security, and it’s what GitHub, GitLab, and Bitbucket recommend. Generate one with `ssh-keygen -t ed25519 -C "YOUR_EMAIL@EXAMPLE.COM"`. Reach for `rsa -b 4096` only when you need to connect to an older server that doesn’t speak Ed25519.

Yes. The same **public** key can be added to as many accounts and services as you like. There’s no need for a separate key per provider. Just paste `id_ed25519.pub` (or `id_rsa.pub`) into each service’s SSH-keys settings.

Usually the key isn’t loaded in the agent, the public key wasn’t added to the service, or the wrong key path is being used. Run `ssh -vT git@github.com` to see which key the client offers, confirm the OpenSSH agent is running, and make sure you uploaded the matching `.pub` file.

The OpenSSH client ships with Windows 10/11 but can be disabled. Install it from an **admin** PowerShell:

Terminal window

```
1Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
```

Git for Windows also bundles `ssh`/`ssh-keygen`, so running the commands inside **Git Bash** works too.

* * *

## [References](#references)

-   [Git Official Website - Downloads](https://git-scm.com/downloads)
-   [Pro Git Book - Generating Your SSH Public Key](https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key)
-   [GitHub Docs - Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)
-   [GitHub Docs - Adding a new SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)
-   [GitHub Docs - Working with SSH key passphrases](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases)
-   [GitHub Docs - Testing your SSH connection](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection)
-   [GitLab Docs - Use SSH keys to communicate with GitLab](https://docs.gitlab.com/ee/user/ssh.html)
-   [Bitbucket Docs - Set up an SSH key](https://support.atlassian.com/bitbucket-cloud/docs/set-up-an-ssh-key/)
-   [Microsoft Docs - OpenSSH key management for Windows](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement)
-   [Microsoft Docs - Get started with OpenSSH for Windows](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse)
-   [Chocolatey - Git Package](https://community.chocolatey.org/packages/git)
-   [Winget - Git Package](https://github.com/microsoft/winget-pkgs/tree/master/manifests/g/Git/Git)
-   [PowerShell Set-Clipboard Cmdlet](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-clipboard)

Was this useful?

## Tags

[#SSH Key Generation](/blog/tags/ssh-key-generation)[#Ed25519](/blog/tags/ed25519)[#Git Configuration](/blog/tags/git-configuration)[#GitHub SSH](/blog/tags/github-ssh)[#GitLab SSH](/blog/tags/gitlab-ssh)[#Bitbucket SSH](/blog/tags/bitbucket-ssh)[#Windows Terminal](/blog/tags/windows-terminal)[#PowerShell](/blog/tags/powershell)[#Ssh keygen](/blog/tags/ssh-keygen)[#Ssh agent](/blog/tags/ssh-agent)[#Public Key Cryptography](/blog/tags/public-key-cryptography)

## Share

[Facebook](https://facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows "Share on Facebook")[Twitter](https://twitter.com/intent/tweet/?text=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows&url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows "Share on Twitter")[LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows&title=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows&summary=Git%20talks%20to%20remotes%20over%20HTTPS%20by%20default%2C%20so%20it%20asks%20for%20your%20username%20and%20password%20on%20every%20git%20pull%20or%20git%20push.%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20all%20let%20Git%20authenticate%20over%20SSH%20with%20a%20public%20key%20instead.%20Here%20is%20how%20to%20generate%20a%20key%20on%20Windows%2C%20add%20it%20to%20each%20service%2C%20and%20stop%20typing%20credentials%20for%20every%20Git%20command.&source=https://mkabumattar.com "Share on LinkedIn")[WhatsApp](https://wa.me/?text=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows%20https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows "Share on WhatsApp")[Telegram](https://t.me/share/url?url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows&text=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows "Share on Telegram")[Reddit](https://www.reddit.com/submit?url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows&title=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows "Share on Reddit")[Hacker News](http://news.ycombinator.com/submitlink?u=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows&t=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows "Share on Hacker News")[Pinterest](https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows&media=&description=Git%20talks%20to%20remotes%20over%20HTTPS%20by%20default%2C%20so%20it%20asks%20for%20your%20username%20and%20password%20on%20every%20git%20pull%20or%20git%20push.%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20all%20let%20Git%20authenticate%20over%20SSH%20with%20a%20public%20key%20instead.%20Here%20is%20how%20to%20generate%20a%20key%20on%20Windows%2C%20add%20it%20to%20each%20service%2C%20and%20stop%20typing%20credentials%20for%20every%20Git%20command. "Share on Pinterest")[Email](<mailto:?subject=Git%20SSH%20Keys%20for%20GitHub%2C%20GitLab%2C%20and%20Bitbucket%20on%20Windows&body=Check out this article: https%3A%2F%2Fmkabumattar.com%2Fblog%2Fpost%2Fgit-ssh-keys-for-github-gitlab-and-bitbucket-on-windows>)

## Comments

## You might also enjoy

More posts on similar topics

[![Git SSH Keys for GitHub, GitLab, and Bitbucket on Linux](/_astro/hero.ohMeiGHZ_Z1ILCmY.webp)](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-linux)

## [Git SSH Keys for GitHub, GitLab, and Bitbucket on Linux](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-linux)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Linux](/blog/categories/linux)
-   [Git](/blog/categories/git)
-   [SSH](/blog/categories/ssh)
-   [Version Control](/blog/categories/version-control)
-   [Developer Tools](/blog/categories/developer-tools)

Introduction By default, Git talks to remotes over HTTPS, so it asks for your username and password on every git pull or git push. SSH fixes that. GitHub, GitLab, and Bitbucket all let Git aut

[#SSH Keys](/blog/tags/ssh-keys)[#Ed25519](/blog/tags/ed25519)[#GitHub SSH](/blog/tags/github-ssh)+8 tags

[read more](/blog/post/git-ssh-keys-for-github-gitlab-and-bitbucket-on-linux)

[![Customization Windows Terminal With Starship](/_astro/hero.C_M2lGhc_1GJQQi.webp)](/blog/post/customization-windows-terminal-with-starship)

## [Customization Windows Terminal With Starship](/blog/post/customization-windows-terminal-with-starship)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Windows](/blog/categories/windows)
-   [Terminal](/blog/categories/terminal)
-   [PowerShell](/blog/categories/powershell)
-   [Starship](/blog/categories/starship)
-   [Customization](/blog/categories/customization)
-   [Developer Tools](/blog/categories/developer-tools)

Introduction In this article, we will install PowerShell and Starship, configure Windows Terminal, and then customize it with Starship. What is Windows Terminal? Windows Terminal is a modern

[#Windows Terminal](/blog/tags/windows-terminal)[#Starship Prompt](/blog/tags/starship-prompt)[#PowerShell Customization](/blog/tags/powershell-customization)+7 tags

[read more](/blog/post/customization-windows-terminal-with-starship)

[![Dotfiles: A Git-Based Strategy for Configuration Management](/_astro/hero.wfzXy7kc_dMWKx.webp)](/blog/post/dotfiles)

## [Dotfiles: A Git-Based Strategy for Configuration Management](/blog/post/dotfiles)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Linux](/blog/categories/linux)
-   [Git](/blog/categories/git)
-   [Configuration Management](/blog/categories/configuration-management)
-   [Developer Tools](/blog/categories/developer-tools)
-   [Productivity](/blog/categories/productivity)

Introduction Your dotfiles, those hidden .-prefixed configuration files scattered across your home directory, are the muscle memory of your environment. They hold your shell aliases, your editor

[#Dotfiles Management](/blog/tags/dotfiles-management)[#Git Bare Repository](/blog/tags/git-bare-repository)[#Shell Configuration](/blog/tags/shell-configuration)+7 tags

[read more](/blog/post/dotfiles)

[![10+ Secret Git Commands That Will Save Hours Every Week](/_astro/hero.BrIIpyXb_8Js6X.webp)](/blog/post/10-secret-git-commands-to-save-time)

## [10+ Secret Git Commands That Will Save Hours Every Week](/blog/post/10-secret-git-commands-to-save-time)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Git](/blog/categories/git)
-   [Version Control](/blog/categories/version-control)
-   [DevOps](/blog/categories/devops)
-   [Software Development](/blog/categories/software-development)
-   [Productivity](/blog/categories/productivity)

Introduction As a software engineer, DevOps engineer, or GitHub user, you probably use Git daily. But are you making the most of it? Git is packed with commands that can save you hours of manual w

[#Git Commands](/blog/tags/git-commands)[#Git Tips](/blog/tags/git-tips)[#Version Control](/blog/tags/version-control)+7 tags

[read more](/blog/post/10-secret-git-commands-to-save-time)

[![How to Install and Setup FireWall on Amazon Linux 2](/_astro/hero.b8oDtFR4_ZdWcUP.webp)](/blog/post/how-to-install-and-setup-firewall-on-amazon-linux-2)

## [How to Install and Setup FireWall on Amazon Linux 2](/blog/post/how-to-install-and-setup-firewall-on-amazon-linux-2)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [AWS](/blog/categories/aws)
-   [EC2](/blog/categories/ec2)
-   [Linux](/blog/categories/linux)
-   [Firewall](/blog/categories/firewall)
-   [Security](/blog/categories/security)

Introduction This tutorial covers installing and configuring firewalld on Amazon Linux 2, including setting the default zone and managing services and ports. Prerequisites To follow along wit

[#Firewalld](/blog/tags/firewalld)[#Amazon Linux 2](/blog/tags/amazon-linux-2)[#EC2 Security](/blog/tags/ec2-security)+5 tags

[read more](/blog/post/how-to-install-and-setup-firewall-on-amazon-linux-2)

[![VIM Cheat Sheet](/_astro/hero.Buk-UDGW_2r0YqI.webp)](/blog/post/vim-cheat-sheet)

## [VIM Cheat Sheet](/blog/post/vim-cheat-sheet)

-   [Mohammad Abu Mattar](/authors/mohammad-abu-mattar)
-   [Linux](/blog/categories/linux)
-   [VIM](/blog/categories/vim)
-   [Text Editors](/blog/categories/text-editors)
-   [Developer Tools](/blog/categories/developer-tools)
-   [Command Line](/blog/categories/command-line)

What is VIM? VIM (Vi Improved) is a versatile text editor pre-installed on most Linux systems, known for its efficiency in command-line file editing. Its modal nature, switching between modes like

[#VIM Commands](/blog/tags/vim-commands)[#VIM Cheat Sheet](/blog/tags/vim-cheat-sheet)[#Text Editing](/blog/tags/text-editing)+5 tags

[read more](/blog/post/vim-cheat-sheet)

6 related posts
