Compare commits

...
4 Commits
Author SHA1 Message Date
hugogogo 1b9b20380f adding copy pasting for screen and vim 2026-10-08 17:21:58 +02:00
hugogogo 141d4bd149 removed oskey notes 2026-10-08 13:01:04 +02:00
hugogogo abc6319dfe update server tuto for ssh 2026-10-08 12:26:25 +02:00
hugogogo f057c70f5b change zsh default theme 2026-10-08 11:56:56 +02:00
5 changed files with 20 additions and 678 deletions
+8 -7
View File
@@ -2,6 +2,8 @@
startup_message off
# permet de copier dans le clipboard, en faisant 'C-a Y' apres un copie avec space
bind Y eval "writebuf" "exec ... sh -c 'wl-copy < /tmp/screen-exchange'"
#pour augmenter le scrollback de l'ecran
defscrollback 10000
@@ -44,13 +46,12 @@ screen
screen -t .vimrc vim -n ./config_files/.vimrc
screen -t .screenrc vim -n ./config_files/.screenrc
screen -t .zshrc vim -n ./config_files/.zshrc
screen -t tutos_vim vim -n ./tutos/vim.txt
screen -t tutos_screen vim -n ./tutos/screen.txt
screen -t tutos_git vim -n ./tutos/git.txt
screen -t tutos_sites vim -n ./tutos/sites.txt
screen -t tutos_computer vim -n ./tutos/computer.txt
screen -t tutos_server vim -n ./tutos/server.md
screen -t notes_oskey vim -n ./notes/oskey.md
screen -t tuto_vim vim -n ./tutos/vim.txt
screen -t tuto_screen vim -n ./tutos/screen.txt
screen -t tuto_git vim -n ./tutos/git.txt
screen -t tuto_sites vim -n ./tutos/sites.txt
screen -t tuto_computer vim -n ./tutos/computer.txt
screen -t tuto_server vim -n ./tutos/server.md
chdir $HOME
screen
+4
View File
@@ -1,5 +1,6 @@
"#hugogogo#
"---------------------------------------------------------------
" base settings
"---------------------------------------------------------------
@@ -32,6 +33,9 @@ set hidden
"set mouse=a
set mouse=
" allow copy in the clipboard
vnoremap <leader>y :w !wl-copy<CR><CR>
" turns on syntax hilighting
syntax on
+2 -2
View File
@@ -21,14 +21,14 @@
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
#ZSH_THEME="robbyrussell"
ZSH_THEME="obraun"
#ZSH_THEME="obraun"
#ZSH_THEME="dpoggi"
#ZSH_THEME="pygmalion"
#ZSH_THEME="aussiegeek"
#ZSH_THEME="bira"
#ZSH_THEME="candy"
#ZSH_THEME="dieter"
#ZSH_THEME="gnzh"
ZSH_THEME="gnzh"
#ZSH_THEME="maran"
#ZSH_THEME="re5et"
#ZSH_THEME="risto"
-454
View File
@@ -1,454 +0,0 @@
---
19/11/24
# reu ux/ui
- travail moins sur l'app, plus sur la presentation sur les stores
- on oublis la meteo sur l'interphone, mais a la place on va implementer un panneau d'informations pour l'immeuble (ex: fete de l'immeuble semaine prochaine, nouveau local velo...)
- pour l'instant ben va l'implementer en static
- differents cas de figures d'invitations
- deja inscrit sur l'app
- deja inscrit mais avec un autre mail
- pas de compte ni app
# PBM :
- anonymous pincode is associated to inhabitant access
---
- update all users pincodes
- iot ajouter api qui regroupe tous les pincodes par intercom (ACD)
## access and pincode creation :
- new access creation :
- create access document in building -> only contains userID -> each time we add a new access for the user, it erase the last one in database
- create pincodes documents in building and user
- create access document in user -> access name is buildingId, and it contains array of accesses -> each time we add a new access for the user, it replace the last one with a new one with the array increased by the new access
- publish to ACD
## delete pincodes :
- quickcode ?
- delete the pincode documents
- delete the access
- pincode ?
- delete the pincode documents
-
## todo v1 :
- **documents :**
- [/] types for inhabitant pincode building
- [/] types for anonymous pincode building
- [/] types for guest pincode building
- [/] types for inhabitant pincode user
- [/] types for anonymous pincode user
- [/] types for guest pincode user
- [/] controllers for inhabitant pincode building
- [/] controllers for anonymous pincode building
- [/] controllers for guest pincode building
- [/] controllers for inhabitant pincode user
- [/] controllers for anonymous pincode user
- [/] controllers for guest pincode user
- [/] services for inhabitant pincode building
- [/] services for anonymous pincode building
- [/] services for guest pincode building
- [/] services for inhabitant pincode user
- [/] services for anonymous pincode user
- [/] services for guest pincode user
- [/] generate unique pincodes with pattern
- **create pincode :**
- [/] create inhabitant user pincodes
- [/] create inhabitant building pincodes
- [/] create anonymous user pincodes
- [/] create anonymous building pincodes
- [/] create guest user pincodes
- [/] create guest building pincodes
- [/] create quickcodes
- **delete pincode :**
- [/] delete quickcodes and access
- **get pincodes:**
- [/] get all user pincode documents
- [/] get all building pincode documents
- [/] get specific user pincode document
- [/] get specific building pincode document
- [/] get user by accessId
- [/] get user pincode id
- [/] get building pincode id
- [/] get all quickcodes for a user
- [ ] a user needs to see the quickcodes in the invitations granted : is it under a building, and when you click on the building in the list you see the quickcode in addition to other accesses ? or in the same arrays as the building invitations ?
- [ ] a user needs to see its pincode to access its own building, is it on the invitations screen ?
- **iot :**
- [ ] update access type in iot node
- **callables :**
- [/] create quickcode
- [/] delete quickcode
- [ ] remove get all pincodes for user ?
- **tests :**
- [/] handle existing documents
- [/] associate created documents with expected ones
- [/] create inhabitants pincodes
- [/] create quickcodes
- [/] check all inhabitant documents created
- [/] check all quickcode documents created
- [/] check inhabitant documents ok
- [/] check quickcode documents ok
- [/] delete quickcodes
- [-] create guest inhabitants
- [ ] pubsub messages for all docs are valid
- [ ] check errors in quickcode creation
- [ ] check errors in quickcode deletion
- **security rules:**
- [-] add security rules for pincodes
- **confluence :**
- [/] documentation on pincode v1
- [/] documentation on pincode callable functions
## todo v2 :
- **delete pincode :**
- delete pincodes ?
- **update pincode :**
- refresh (automatic and manual)
- change informations ? (ex: dates)
- update all pincodes (for example if we upgrade the pincode behavior, to reflect on existing ones)
- **iot :**
- iot needs to have a list of the pincodes for an ACD
- **additional :**
- createAccess returns pincode id in a clean way (or, add pincodeId to access docs, so we can retrieve it ?) (CLD1-559)
- each quickcode (and pincode ?) creation does not trigger a replacement of the database access document in building and user (CLD1-560)
- clean pincodes : pincodes documents may have been partially deleted, only in user or in building, or forgotten when access or invitation has been deleted
- should we put pincodes documents in inviter collection ? also adding a field 'inviter' in pincode documents
---
- `test_checks` : 553
- `pincode_test_match_helper_function` : 595
- `utility_error_log` : 542
- `utility_parameter` : 541
---
- guest user service created
- call the service from createAccess
- create tests to check if it works
- fix tests for quickcodes
---
- [/] update my branch with develop
- [/] add dates to guests and permanent-guests
- [/] user can delete its quickcodes
- [ ] front needs to get invitations and quickcodes
- [ ] update callable to get invitations : fix database call, and add get-quickcode
- [ ] create service to get quickcodes
- [ ] front needs to get pincode informations (id only ?) when click on an access
- [ ] create callable for that ? or better : plug into the callable used to get the access informations (if exists)
- [ ] **add v2 task :** delete pincodes
- [ ] **add v2 task :** should we put pincodes documents in inviter collection ? also adding a field 'inviter' in pincode documents
- [ ] test callable create-quickcodes
- [ ] test pubsub messages
- [ ] test access creation for quickcodes
- [ ] test guest pincodes
- [ ] update access type in iot node
- [ ] add security rules for pincodes
- [ ] test security rules
- [ ] delete current callable function to get-pincodes ? or keep it ? it has not been well tested
--
- inhabitantUser
- inhabitantGuestUser -> time
- inhabitantPermanentGuestUser -> time
- get pincode of the invitation -> the guest can see the pincode on the invitation
- getQuickcodes
- add jira issue for the enum import
- getAllinvitesBasedOnVisibility
--
- inhabitantGuestUser && inhabitantPermanentGuestUser :
- add dates
- put documents in invited collection
- add jira : put documents in inviter collection
- add jira : delete pincodes
- delete quickcodes
--
- test callable create quickcodes
- test callable get quickcodes by user
- check on figma what other functions are necessary for v1
- callable get quickcodes by pincodes ?
- callable delete quickcodes ?
- test pubsub messages
- test errors
---
1. create jira epic : "add helpers for repetitive tasks"
2. create 2 topic :
- "security checks in callable functions"
- "logging and throwing errors"
3. rebase branch `security_and_errors` into current develop :
- git checkout `develop`
- git pull `develop`
- git checkout `security_and_errors`
- git rebase --onto develop 4af5282cf6c23be9b86a59a3772337a1a8fe36ae
- git checkout `develop`
- git rebase `security_and_errors`
4. create jira issue in debt for todo in createAccess about return null instead of throwing errors (/workspace/functions/src/modules/core/modules/access/services/access.service.ts)
5.
**questions:**
- how access documents and pincodes and devices documents are linked ?
- user have access documents, that only contains 'user' and 'building' infos
- they do not say 'access with device' or 'pincode'
```
/users/{userId}/accesses/
- accessId: string
- accesses:
[
{
- accessId: string
- accessRights: [{validity: 'permanent'}, ]
- authorizedDoors:
[
{
},
{
- accessControlDevices:
[
{
},
{
},
]
- doorId: string
- doorName: string
- doorStreetAddress: {}
},
]
- creationDate: Timestamp
- inviterId: string
- inveterName: string
- type: OSKUserAccessType
- unitId: string
},
]
- buildingId: string
- buildingImageFilename: string
- bulidingName: string
- buildingStreetAddress: {}
- creationDate: Timestamp
- userFirstName: string
- userId: string
- userLastName: string
```
---
1. why not adding buildingId in the user pincode document ? and start and end time ?
- we add buildingId because it will help find the associated building document, but the other infos are not relevant unless front need it
2. why having a request.userId parameter if we can identify the userId with the auth ?
- not sure, but might be for security
3. check permissions ? how do they work ? are they always related to organizations ? What is an organization anyway ?
- permissions are for organization users, which are either oskey admin user or client admin user, because they can have different roles and permissions. But not for normal users
4. why is there no user document in buildings collection ?
- the user document in building collection is not actually a user document, but something else (i dont remember)
5. how to change iot
- this is another project that i have to clone
---
- [/] generate pincodes with constraints
- [/] create services and controllers to add pincode documents
- [/] create pincode documents when users are added
- [/] add pincode to access
- [/] add doors to pincodes documents
- [/] test if pincodes documents are created and contains all fields
- [ ] add pincode access to iot
- [/] create services and controllers to get pincode
- [ ] test get pincode service
- [ ] create pincode for guest users
- [ ] test pincode creation for guest users
- [-] write pincode security rules
- [ ] test pincode creation -> test pincode rules
- [-] add callable functions to create anonymous pincodes
- [ ] test pincode callable functions to create anonymous pincodes
- [ ] add callable functions to get user pincodes
- [ ] test pincode callable functions to get user pincodes
- [ ] test pincode accesses
- [ ] add callable function to delete pincodes
- [ ] test pincode deletion
---
15/10/24
- console.log vs logger function ?
-
---
10/10/24
pincodes child issues :
old :
- create pincode controller structure
- generate pincode with constraints
- generate docs when pincode created
- get pincodes by user, building, and both
- pincode firestore rules
- update OSKAccessMethod
- add pincode to access
- update pincode accessMethod in iot endpoint
- tests
new:
- [s] generate pincodes with constraints
- [s] create services and controller to add pincodes documents
- [s] create pincodes documents when users are added
- [s] add doors to pincodes documents
- [t] tests if pincodes documents are created and contains all fields
- [s] create services and controller to get pincodes
- [s] add pincode to access
- update OSKAccessMethod
- update pincode accessMethod in iot endpoint
- [t] write pincodes security rules
- [t] test pincodes creation
---
09/10/24
- what is the difference between `._set()` and `._create()` :
- why `._set()` needs a creationDate timestamp and not `._create()` ?
- what happens if we use `._create()` and then `._set()` to override ? will the creationDate be there ?
- when to use which one ?
---
07/10/24
- in `/workspace/functions/src/modules/core/modules/access/controllers/access_pincode.controller.ts`
is it ok to have `export class OSKPincodeController extends OSKDocumentController<OSKBuildingPincodeDocument> {`
with a controller in core build on a controller in building ?
- **yes**
- the function to check if code is uniq cannot prevent collisions, in its actual form
- **ticket oppened, to do it with redis (FIR1-469)**
- should i use "this" instead of refering the class itself ?
- i didnt get the .default very well so far
- i didnt get exactly the distinction btwn controller and service for a document
- **controller will directly call the database**
- i didnt get also the organization in modules, do they correspond to a collection in the database ?
---
20/09/24
#### documents non detruits quand les users sont detruits :
- accesses
- organizations
- organizationInvitations
- sentInvitations
- invitations
#### documents detruits avec les users :
- devices
---
19/09/24
questions pour greg:
- dans quel cas utiliser le "retries(500)" ?
- les rules ne semblent pas proteger quand on est admin, c'est normal ?
- je ne pense pas avoir besoin de rajouter des indexes, puisque je n'utilise que le champ "accountDeletionDate"
- scheduled functions not supported in emulator : https://github.com/firebase/firebase-tools/issues/2034
---
17/09/24
- scheduler
- tester rules
- indexe
---
12/09/24
utiliser "confluence" de attlassian, une sorte de wiki
utiliser le drive et les docs de google
utiliser les app slacks pour recevoir les notifications
questions pour greg:
- conventions de nommage et organisations des tests
- tests update document beosins d'etre plus complets ?
- pourquoi 2 types de timestamp differents, ex in :
- `functions/src/modules/user/models/documents/user_document.model.ts`
- `test/src/specs/user/user_deletion.specs.ts`
- où se trouvent les dossiers sur le drive / docs ?
---
10/09/24
reu dev
framework auth fournit par google :
- reauth , valider nouvel email ,
pour pouvoir customizer les emails il faudrait le faire soi-meme en backend, pas prioritaire pour l'instant
---
09/09/24
1rst day
- installer slack
- installer vscode (ou vscodium en open source)
- regarder les firmware iot : le sdk est uniquement disponible sur les versions LTS
- dev container : les repository vscode contiennent tous un dev container pour les dependances (genre image-magik)
- apigee : api gateway (!= proxy) -> security
- service account : gestion de token interne a google, entre les containers
- gestion git : gitkraken ou source tree
- utiliser chrome plutot que chromium ou firefox
- install nerd font
1. creer un projet firebase en suivant tuto firestore et cloud functions
2. voir tuto sur codelab "local development with firebase"
- test-firebase-6fe21
- session id : 7D583
---
# devcontainer ownership
- inside the dev container, the user is vscode (1001), so outside the container the local user (asususus) cannot modify files, nor push or pull or anything
- the solution is to give the user rights on the files, without changing them, by using ACL :
- **sudo setfacl -R -m u:asususus:rwx ./firebase-oskey-dev** : give recursive read+write+execute access to user asususus
- **sudo setfacl -R -d -m u:asususus:rwx ./firebase-oskey-dev** : set default acl access for all futur changes in the folder
- to remove : **sudo setfacl -Rb ./firebase-oskey-dev**
### ! previous method didn't worked very well
- so instead, outside the container, i added my user `asususus` to the group 1001 `piavpn` :
- **sudo usermod -aG piavpn asususus**
# github ssh
- to connect to ssh from local machine, need to tell ssh to not use the ssh key it uses for personnal account github.com
- to do that, create a config file and tells it to use another key when remote is 'github.com.oskey'
- in ~/.ssh/config file:
```
# gitHub personal account
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
# For GitHub work account
Match host github.com exec "basename $(pwd)" == "firebase-oskey-dev"
IdentityFile ~/.ssh/id_ed25519_hugo_oskeys
```
+6 -215
View File
@@ -1,222 +1,13 @@
ssh huho@62.210.206.99
---
install new os steps :
- exemple os : proxmox
- connect to ecowan
- activate IPMI (Intelligent Platform Management Interface) :
- fill ip address (ip of internet connexion)
- ecowan generates :
- the session ip : 51.159.47.149
- the username : sd-51086
- the password is shown on ecowan panel
- you can use it to connect to the IDRAC6 panel with different methods :
1. either go to the url `https://51.159.47.149`
2. or with this script (which download the java packages and create the console for you) :
- the script can be found here : **https://gist.github.com/TheJJ/2394cd76d3e2c34d02e3da1bd3e489b2?ref=blockdev.io**
- I added it to this config folder
- i also added it to the PATH **~/.local/bin/idracclient.py** so you can call it from anywhere like that : **idracclient.py <ip> -u <username>**
3. or use a java console, manually (you need to download all the java packages),
- folder architecture :
```
idrac-folder/
├── jre/ ← contains bin/java
├── jnlp/ ← optional: keep the original .jnlp here for backup
├── avctKVM.jar
├── lib/
│ ├── libavctKVMIO.so
│ └── libavmLinux.so
└── start-virtual-console.sh
```
- jre/ :
- download from oracle : https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
- download `1.7.0_80 or 1.7.0_79` : `jre-7u80-macosx-x64.tar.gz` or `jre-7u79-macosx-x64.tar.gz` (need to create an account)
- jnlp/ :
- connect to idrac online from ecowan session
- download jnlp by clicking `launch virtual console`
- avctKVM.jar :
- find the file avctKVM to download in the jnlp file by looking for line : `<jar href="https://<idrac-ip>:443/software/avctKVM.jar" />`
- download with this curl command to avoid problems with dh : `curl -k --ciphers 'DEFAULT:!DH' "https://51.159.47.149:443/software/avctKVM.jar" -o avctKVM.jar`
- lib/ :
- find the lines in jnlp file to download :
`<nativelib href="https://51.159.47.149:443/software/avctKVMIOLinux64.jar" download="eager"/>`
`<nativelib href="https://51.159.47.149:443/software/avctVMLinux64.jar" download="eager"/>`
- download them :
`curl -k --ciphers 'DEFAULT:!DH' "https://51.159.47.149:443/software/avctKVMIOLinux64.jar" -o avctKVMIOLinux64.jar`
`curl -k --ciphers 'DEFAULT:!DH' "https://51.159.47.149:443/software/avctVMLinux64.jar" -o avctVMLinux64.jar`
- `mkdir -p lib`
- extract from the native library jars
`unzip -j avctKVMIOLinux64.jar "*.so" -d lib/`
`unzip -j avctVMLinux64.jar "*.so" -d lib/`
- start-virtual-console.sh :
```
#!/bin/bash
echo -n 'jre folder: '
read dracjrefolder
echo -n 'host ip: '
read drachost
echo -n 'username: '
read dracuser
echo -n 'password: '
read -s dracpwd
echo
./$dracjrefolder/bin/java -cp avctKVM.jar -Djava.library.path=./lib com.avocent.idrac.kvm.Main ip=$drachost kmport=5900 vport=5900 user=$dracuser passwd=$dracpwd apcp=1 version=2 vmprivilege=true "helpurl=https://$drachost:443/help/contents.html"
```
- make it executable : `chmod +x start-virtual-console.sh`
- then on the console, you don't need to login, just click on attaching a media, map your iso file, and then click on warn reboot, and when prompter press f11 to enter boot menu and choose the virtual cd with the iso file
---
proxmox network configuration :
- hostname (FQDN - Fully Qualified Domain Name) : proxmox.hugulumu.fr
- ip address (CIDR) : 62.210.206.99/24
- gateway : 62.210.206.1
- DNS server : 1.1.1.1 (cloudflare)
- url : https://62.210.206.99:8006
still need to do :
- Create the A record (e.g. proxmox.hugulumu.fr) :
You can point your domain whenever you want — the hostname is just internal until then.
- Configure HTTPS (Let’s Encrypt or proxy) :
By default, Proxmox uses a self-signed cert. You’ll get browser warnings, but it still works securely.
- Set up a firewall or 2FA :
Strongly recommended later, especially since it’s a public server — but not required to get started.
-> Enable 2FA, Or even set up a reverse proxy with HTTPS (Let’s Encrypt) and restrict access with a VPN or fail2ban
todo list :
✅ 1. DNS Configuration
- [ ] Create an A record:
- proxmox.hugulumu.fr → your server’s public IP.
- Do it from your domain registrar (where you manage hugulumu.fr).
- [ ] Wait for DNS propagation (can take a few minutes to hours).
🔐 2. HTTPS Access
- [ ] Set up a valid SSL certificate for your Proxmox web UI:
- Option 1: Use Let’s Encrypt via acme.sh or Proxmox built-in ACME support.
- Option 2: Use a reverse proxy like Nginx or Caddy (if you plan to expose more services later).
🛡️ 3. Firewall Setup
- [ ] Enable firewall on Proxmox (Datacenter → Firewall → Enable).
- [ ] Create basic rules:
- Allow Web UI (port 8006)
- Allow SSH (port 22)
- Block everything else by default
- [ ] If your hoster (like Online.net / Scaleway / Hetzner?) has a cloud firewall, configure it too.
🔐 4. Secure Access
- [ ] Create a new user for yourself, disable root login (or set 2FA for root)
- [ ] Enable 2FA (TOTP) for web UI
- [ ] Set up SSH key authentication and disable password SSH login (optional but good)
🧰 5. System Updates
- [ ] apt update && apt full-upgrade
- [ ] Enable automatic security updates:
```
apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
```
🧠 6. Backups and Templates
- [ ] Set up a storage volume (local or NFS/SSH backup target)
- [ ] Download some VM templates (Debian, Ubuntu, etc.)
- [ ] Create a snapshot or scheduled backup job
🚨 Optional (But Nice):
- [ ] Set up fail2ban or similar tool
- [ ] Monitor with cockpit or netdata
- [ ] Set up email notifications for Proxmox alerts
---
install pbs on a vm on proxmox (Proxmox Backup Server) -> to have incremental backups
---
when i connect to proxmox i get this message : You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.
ChatGPT said:
Yep, that message is normal if you're using the free version of Proxmox without a paid subscription.
💡 What it means
Proxmox VE (Virtual Environment) is open source and free to use.
But they offer enterprise support via paid subscriptions.
That message is just a reminder—it doesn’t block any functionality (except access to the enterprise repo).
✅ Your Options
1. Ignore It
Totally safe to ignore.
It just appears after login on the web UI.
2. Disable the Message (UI Only)
You can remove the popup by editing a file on your Proxmox host:
nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
Search for:
if (data.status !== 'Active') {
And change it to:
if (false) {
Then save (Ctrl+O, Enter, Ctrl+X) and clear your browser cache or reboot the UI:
systemctl restart pveproxy
⚠️ Note: This gets overwritten when you update Proxmox, so it’s a temporary cosmetic fix.
3. Switch to the Free Repo
Make sure you're using the no-subscription repository for updates:
Edit this file:
nano /etc/apt/sources.list.d/pve-enterprise.list
Comment out the enterprise repo:
# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
Then add the no-subscription repo:
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
And update:
apt update && apt full-upgrade
Let me know if you want help setting that up or if you're considering a subscription.
-------------------------------------------------------------------------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
END PROXMOX
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-------------------------------------------------------------------------------------
ipv6 : fe80::d6ae:52ff:fec9:29d6
netmask : 64
gateway : fe80::226:bff:feef:59ff
# server :
------------------------------------------------------------------------------------
## connect with ssh :
- create ssh key
- `ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_<name_of_file> -C <name_in_pub_key>`
- ex: `ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_contabo_yunohost_huho -C 42_contabo_yunohost_huho`
- then i know :
- that this key is for yunohost server at contabo, for user huho
- and when i look at the public key on server, i see it's used from 42
- **ssh <username>@<server_ip>**
- if first time after reinstalling on same ip, you need to remove local old keys :
- **ssh-keygen -f "/path/to/.ssh/known_hosts" -R <ip>**